在广播Dataframe并尝试在Spark UDF中访问它时,我得到Null指针异常。
UDF定义 -
def test_udf(parm1: String, parm2: String, paarm3: String, ) = {
println ("Inside UDF ")
B.value.take(1).foreach { println }
println("after print")
..... .......}
> sqlContext.udf.register("test_udf", test_udf _)
广播 -
val B = sc.broadcast(sqlContext.sql("""Select * FROM table_a where col1='10102'""")) // Returns almost 20 MB data
访问UDF -
val df = sqlContext.sql("SELECT test_udf(parm1,parm2,parm3) AS test FROM table_b").take(1)
在此行之后,我在UDF下面的行中获取空指针异常B.value.take(1).foreach {println}
我怀疑广播没有正确发生。这段代码有问题吗?使用Spark 1.6.1
答案 0 :(得分:2)
你得到一个例外,因为它不是一个有效的Spark程序:
DataFrame
对象不是一个有意义的操作。这就是我们have broadcast join hints。DataFrame
。