如何将 SparkR 结果存储到 R 对象中?

How to store SparkR result into an R object?

对于 Azure Databricks 的世界来说仍然是一个新手,即使对于非常简单的任务,SparkR 的使用对我来说仍然非常模糊...

我花了很长时间才找到如何计算不同的值,我不确定这是正确的方法:

library(SparkR)
sparkR.session()

DW <- sql("select * from db.mytable")
nb.var <- head(summarize(DW, n_distinct(DW$VAR)))

我以为我找到了,但是nb.per不是一个对象,而是一个dataframe...

class(nb.per)
[1] "data.frame"

我试过了:

nb.per <- as.numeric(head(summarize(DW, n_distinct(DW$PERIODE))))

看起来不错,但我很确定有更好的方法来实现这个目标?

谢谢!

SparkR::sql函数returns一个SparkDataFrame。

为了在 R 中将其用作 R data.frame,您可以简单地对其进行强制转换:

 as.data.frame(sql("select * from db.mytable"))

既然你一直在使用 Spark SQL,一个非常简单的方法就是这样做:
nb.per <- `[[`(SparkR::collect(SparkR::sql("select count(distinct VAR) from db.mytable")), 1).
并使用像这样的 SparkR API:

DW <- SparkR::tableToDF("db.mytable")
nb.per <- `[[`(SparkR::collect(SparkR::agg(DW, SparkR::countDistinct(SparkR::column("VAR")))), 1)