scala-数据帧中ArrayType列之间的差异

我有2个ArrayType列的数据框.
我想找到列之间的区别. column1将始终具有值,而column2可能具有空数组.
我创建了以下udf,但无法正常工作

df.show()提供以下记录

样本数据:

["Test", "Test1","Test3", "Test2"], ["Test", "Test1"]

码:

sc.udf.register("diff", (value: Column,value1: Column)=>{ 
                        value.asInstanceOf[Seq[String]].diff(value1.asInstanceOf[Seq[String]])          
                    })  

输出:

["Test2","Test3"]

Spark版本1.4.1
任何帮助将不胜感激.

最佳答案
您需要将udf更改为:

val diff_udf = udf { ( a:  Seq[String], 
                       b:  Seq[String]) => a diff b }

然后工作:

import org.apache.spark.sql.functions.col
df.withColumn("diff",
  diff_udf(col("col1"), col("col2"))).show
+--------------------+-----------------+------------------+
|                col1|             col2|              diff|
+--------------------+-----------------+------------------+
|List(Test, Test1,...|List(Test, Test1)|List(Test3, Test2)|
+--------------------+-----------------+------------------+

数据

val df = sc.parallelize(Seq((List("Test", "Test1","Test3", "Test2"), 
                             List("Test", "Test1")))).toDF("col1", "col2")

转载注明原文:scala-数据帧中ArrayType列之间的差异 - 代码日志