broadcast array[row]并在单独的包中使用它

wqlqzqxt  于 2021-07-13  发布在  Spark
关注(0)|答案(0)|浏览(200)

我想通过执行 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对象。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题