将数据帧转换为 udf 中的列表时出现空指针异常
null pointer exception while converting dataframe to list inside 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 中是不可能的。解决方案要么使用连接,要么在转换和广播之外进行收集。
我正在阅读 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 来完成此操作,但想知道这里出现空指针异常的原因是什么。
谢谢。
请检查这个关于