Sparklyr无法引用spark_apply中的表

时间:2018-10-11 06:40:10

标签: r apache-spark sparklyr

我想使用spark_apply遍历许多数据过程以生成特征。为此,我需要引用已经加载到spark中的表,但是出现以下错误:

  

错误sparklyr:RScript(3076)意外终止:找不到对象'ref_table'

可复制的示例:

ref_table <-   sdf_along(sc, 10)
apply_table <- sdf_along(sc, 10)

spark_apply(x = apply_table, 
            f = function(x) {
              c(x, ref_table)
            })

我知道我可以在函数内部引用库,但是不确定如何调用数据。我正在通过rstudio运行本地Spark集群。

1 个答案:

答案 0 :(得分:0)

不幸的是,这里的失败是可以预期的。

Apache Spark以及基于它的平台不支持像这样的嵌套转换。您不能通过工作人员代码使用嵌套的转换,分布式对象或Spark上下文(在spark_connection情况下使用sparklyr)。

有关详细说明,请查看我对Is there a reason not to use SparkContext.getOrCreate when writing a spark job?的回答。

您的问题没有给出足够的背景信息来确定最佳的解决方案,但总的来说,有两种可能的解决方案:

  • 只要其中一个数据集足够小,可以存储在内存中,请直接在闭包中将其用作普通R对象。
  • 将问题重新表达为join或笛卡尔积(Spark的crossJoin)。