我有一个SortedMap
例如:
key value
-----------
aaa 1
bbb 2
ccc 3
数据集有3列:
col1 col2 col3
------------------
zzz aaa w
xxx ccc n
sss bbb v
我想从col2
更改列SortedMap
的值,因此生成的数据集如下:
col1 col2 col3
------------------
zzz 1 w
xxx 3 n
sss 2 v
我创建了一个UDF
val udf1 = udf((col: String) => sortedMap(col).toString())
并编写以下内容以更改列值
dataset.withColumn("col2", udf1($"col2"))
但代码无效。
答案 0 :(得分:0)
您不需要为此创建udf
功能。简单的left join
和select
函数应该可以解决问题
import org.apache.spark.sql.functions._
dataSet.join(sortedMap, dataSet("col2") === sortedMap("key"), "left")
.select(col("col1"), col("value").as("col2"), col("col3"))
.show(false)
应该给你
+----+----+----+
|col1|col2|col3|
+----+----+----+
|zzz |1 |w |
|xxx |3 |n |
|sss |2 |v |
+----+----+----+
如果您的sortedMap数据集很小,则可以使用广播
val broadCasted = sc.broadcast(sortedMap)
import org.apache.spark.sql.functions._
dataSet.join(broadCasted.value, dataSet("col2") === broadCasted.value("key"), "left")
.select(col("col1"), col("value").as("col2"), col("col3"))
.show(false)