关于Apache Spark:访问BroadCasted Dataframe时获取Null指针异常

Getting Null pointer exception while accessing BroadCasted Dataframe

广播数据帧并尝试在Spark UDF中访问它们时,我得到了Null指针异常。

UDF定义-

1
2
3
4
def test_udf(parm1: String,  parm2: String,  paarm3: String,  ) = {
println ("Inside UDF")          
B.value.take(1).foreach { println }
println("after print")

...
.......}

1
> sqlContext.udf.register("test_udf", test_udf _)

广播-

1
val B = sc.broadcast(sqlContext.sql("""Select * FROM table_a where col1='10102'""")) // Returns almost 20 MB data

访问UDF-

1
val df = sqlContext.sql("SELECT test_udf(parm1,parm2,parm3) AS test FROM table_b").take(1)

此行之后,我在B线下方的UDF中得到空指针异常。value.take(1).foreach {println}

我怀疑广播无法正确进行。这段代码有问题吗?使用Spark 1.6.1


由于它不是有效的Spark程序,因此会出现异常:

  • 广播DataFrame对象不是有意义的操作。这就是为什么我们广播了连接提示。
  • Spark不支持对分布式数据结构进行嵌套操作。换句话说,您不能在UDF中访问DataFrame