如何让dplyr::summary\u all使用databricks在sparkdataframe上工作?

py49o6xq  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(452)

问题

我有一个巨大的sparkDataframe,叫做x。我用的是databricks。x是数十亿条记录,太大了,无法在一台机器上收集。我该怎么做才能让它工作

dplyr::summarize_all(x,mean)

更多信息

这是我当前收到的错误消息:

Error in UseMethod("tbl_vars") : 
  no applicable method for 'tbl_vars' applied to an object of class "SparkDataFrame"

class(x)

返回:[1]“sparkdataframe”attr(,“package”)[1]“sparkr”
这本书《用r掌握spark》有一个例子,加载一个微小的rDataframe,然后在上面运行所有的程序:

cars <- copy_to(sc, mtcars)
summarize_all(cars, mean)

注意:上面的代码在我的databricks集群上工作,并返回一个很好的文本块:


# Source: spark<?> [?? x 11]

    mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1  20.1  6.19  231.  147.  3.60  3.22  17.8 0.438 0.406  3.69  2.81

同样的书让我相信我可以在巨大的sparkDataframe上使用这个和类似的函数。
还有

class(cars)

退货:

[1] "tbl_spark" "tbl_sql"   "tbl_lazy"  "tbl"

很明显,我需要将sparkDataframe转换为tbl\u spark、tbl\u sql、tbl\u lazy或tbl,这样我就可以将它传递给dplyr::summary\u all,但我已经搜索了所有地方,并询问了Maven,无法找到如何做到这一点。

b5lpy0ml

b5lpy0ml1#

你说得对 SparkR 以及 sparklyr 不同的api不能很好地结合在一起。您可以转换 SparkR 要与一起使用的Dataframe sparklyr 通过使用临时表。
下面是一个例子 SparkR Dataframe。

sc <- sparklyr::spark_connect(method = "databricks")

x_sparkr <- SparkR::sql("SELECT 1 AS a UNION SELECT 2")

创建临时表。

SparkR::registerTempTable(x_sparkr, "temp_x")

把它装进 sparklyr .

x_sparklyr <- dplyr::tbl(sc, "temp_x")

dplyr::summarize_all(x_sparklyr, mean)

# > # Source: spark<?> [?? x 1]

# >       a

# >   <dbl>

# > 1   1.5

相关问题