我遇到以下问题:我想在数据框A中添加一列RealCity
,当City值为' noClue'时,我要从df B中选择什么,使用Key,得到城市。
表A:
+---------+--------+
| Key | City|
+---------+--------+
|a | PDX |
+---------+--------+
|b | noClue |
表B:
+---------+--------+
| Key | Name |
+---------+--------+
|c | SYD |
+---------+--------+
|b | AKL |
我想使用.withColumn
和when
,但我无法通过这种方式选择另一个表(表B)。这样做的好方法是什么?非常感谢!
答案 0 :(得分:7)
鉴于您有两个ProtoContract
A:
dataframes
B:
+---+------+
|key|City |
+---+------+
|a |PDX |
|b |noClue|
+---+------+
您只需使用+---+----+
|key|Name|
+---+----+
|a |SYD |
|b |AKL |
+---+----+
join
Key
并使用withColumn
和when
功能
val finalDF = A.join(B, Seq("Key"), "left").withColumn("RealCity", when($"City" === "noClue", $"Name").otherwise($"City")).drop("Name")
你应该有最终输出
+---+------+--------+
|key|City |RealCity|
+---+------+--------+
|a |PDX |PDX |
|b |noClue|AKL |
+---+------+--------+