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 。