工作过程中的火花数据帧

时间:2016-02-03 06:40:22

标签: apache-spark

我需要将数据帧广播到要在其中使用的工作进程。这就是我正在尝试的

val currencydf = sqlContext.read.format(constants.CASSNADRA_CLASS).options(Map( "table" -> constants.CASSANDRA_TABLE_EXCHANGE, "keyspace" -> constants.CASSANDRA_KEYSPACE)).load
currencydf.cache
val bdCurrencyDF = sparkContext.broadcast(currencydf)

当我把它传递给

foreachPartition{

val currencyDataFrame = bdCurrencyDF.value

我在java中为数据帧获得了一个空指针异常。

如果无法做到这一点,有人可以回答这个问题 1)如何从执行程序进程中的表创建数据框?我们可以访问sparkcontext或sqlcontext吗? 2)如果没有,我如何将数据帧从驱动程序传递给执行程序

1 个答案:

答案 0 :(得分:0)

  1. 如文档中所示,数据框不是通过调用Orange进行广播,而是通过调用cache进行广播,这在您的示例中不存在。 https://spark.apache.org/docs/latest/programming-guide.html#broadcast-variables

  2. 您是否考虑过进行简单的广播加入?从SPARK-8300开始,用户现在可以做到 Broadcast 给查询计划器一个提示“正确”的DataFrame很小,应该进行广播。