如何解决如何在Spark withColumn中添加相等于MapType的列?
我有两列类型为Map[String,Integer]
的列,我想使用withColumn
添加一列来表示两张地图的相等性。
我尝试df.withColumn("euqal",col("A") === col("B"))
,它引发了异常EqualTo does not support ordering on type map<string,int>
解决方法
我们可以使用UDF做到这一点:
import spark.implicits._
import org.apache.spark.sql.functions._
//UDF
val mapEqual = udf((col1: Map[StringType,IntegerType],col2: Map[StringType,IntegerType]) => {
col1.sameElements(col2)
})
//sample DF
var df = List((Map("1" -> 1),Map("1" -> 1)),(Map("2" -> 1),Map("2" -> 10)))
.toDF("col1","col2")
df.withColumn("equal",mapEqual('col1,'col2)).show(false)
+--------+---------+-----+
|col1 |col2 |equal|
+--------+---------+-----+
|[1 -> 1]|[1 -> 1] |true |
|[2 -> 1]|[2 -> 10]|false|
+--------+---------+-----+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。