我需要将数据帧广播到要在其中使用的工作进程。这就是我正在尝试的
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)如果没有,我如何将数据帧从驱动程序传递给执行程序
答案 0 :(得分:0)
如文档中所示,数据框不是通过调用Orange
进行广播,而是通过调用cache
进行广播,这在您的示例中不存在。
https://spark.apache.org/docs/latest/programming-guide.html#broadcast-variables
您是否考虑过进行简单的广播加入?从SPARK-8300开始,用户现在可以做到
Broadcast
给查询计划器一个提示“正确”的DataFrame很小,应该进行广播。