我想通过执行 val broadcastedDF = spark.sparkContext.broadcast(DF.collect())
接下来我要做的是,我有一个带有静态变量的pojo类,我将这个广播变量分配给它: setBroadCastDF(broadcastedDF, spark)
,我正在发送 spark
这里也是。
我想在这里实现的是,我有一个自定义项,在这里我想使用这个数组[行],使用模式重新创建df,然后对它执行一些查找。我想我遗漏了一些东西,因此在尝试访问udf中的broadcast变量时,我得到了一个npe。
var dedupedDFValue = getBroadCastDF();
val schema = StructType(
StructField("column_a", StringType, false) ::
StructField("column_b", StringType, false) :: Nil)
println("Test if broadcast has value ? " + dedupedDFValue.value.take(10))
最后一行在这里抛出空指针异常。因为我创建广播变量并访问它的逻辑是在文件[2个文件]之间划分的,所以我不理解执行什么操作会真正广播数据,以便udf可以访问它?我创建了pojo层来解决这个问题,但这并没有像预期的那样工作。另外,是否可以分享 spark
反对?在so中,很少有问题表示不,说明 spark
对象属于驱动程序,没有执行者可以访问它,而其他一些问题表明可以共享spark对象。
暂无答案!
目前还没有任何答案,快来回答吧!