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



我正在读取 2 个不同的.csv文件,其中只有以下列:

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

尝试搜索 dF2("PID") 是否存在于 dF1("ID"):

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

这给了我空指针异常。但是如果我在外面转换 dF1 并在 udf 中使用列表,它可以工作:

    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 来完成此操作,但想知道这里空指针异常的原因是什么。

谢谢。

请检查有关在另一个数据帧的转换中访问数据帧的问题。这正是您正在使用UDF所做的,这在Spark中是不可能的。解决方案是使用加入,或者在转换和广播之外收集。

最新更新