访问BroadCasted Dataframe时获取Null指针异常

时间:2016-07-07 11:51:23

标签: apache-spark apache-spark-sql

在广播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

1 个答案:

答案 0 :(得分:2)

你得到一个例外,因为它不是一个有效的Spark程序:

  • 广播DataFrame对象不是一个有意义的操作。这就是我们have broadcast join hints
  • 的原因
  • Spark不支持对分布式数据结构的嵌套操作。换句话说,您无法访问UDF中的DataFrame