将数据帧转换为udf内的列表时出现空指针异常

时间:2017-11-03 07:43:13

标签: scala spark-dataframe

我正在阅读2个不同的 .csv 文件,这些文件只有以下栏目:

    val dF1 = sqlContext.read.csv("some.csv").select($"ID")
    val dF2 = sqlContext.read.csv("other.csv").select($"PID")

尝试搜索dF1(“ID”)中是否存在dF2(“PID”):

    val getIdUdf = udf((x:String)=>{dF1.collect().map(_(0)).toList.contains(x)})
    val dfFinal = dF2.withColumn("hasId", getIdUdf($"PID"))

这给了我空指针异常。 但如果我将dF1转换为外部并在udf中使用list,则可以正常工作:

    val dF1 = sqlContext.read.csv("some.csv").select($"ID").collect().map(_(0)).toList
    val getIdUdf = udf((x:String)=>{dF1.contains(x)})
    val dfFinal = dF2.withColumn("hasId", getIdUdf($"PID"))

我知道我可以使用 join 来完成此操作,但想知道这里是否有空指针异常的原因。

感谢。

1 个答案:

答案 0 :(得分:3)

请查看有关accessing dataframe inside the transformation of another dataframe的问题。这正是您使用UDF所做的,而这在spark中是不可能的。解决方案是使用join,或者在转换和广播之外收集。