spark为另一个df上的condtions添加col到数据帧

时间:2017-07-19 07:44:11

标签: scala apache-spark dataframe

我遇到以下问题:我想在数据框A中添加一列RealCity,当City值为' noClue'时,我要从df B中选择什么,使用Key,得到城市。

表A:

   +---------+--------+
   |     Key |    City|   
   +---------+--------+
   |a        |    PDX |   
   +---------+--------+
   |b        | noClue | 

表B:

   +---------+--------+
   |     Key |  Name  |   
   +---------+--------+
   |c        |    SYD |   
   +---------+--------+
   |b        |   AKL  | 

我想使用.withColumnwhen,但我无法通过这种方式选择另一个表(表B)。这样做的好方法是什么?非常感谢!

1 个答案:

答案 0 :(得分:7)

鉴于您有两个ProtoContract

A:

dataframes

B:

+---+------+
|key|City  |
+---+------+
|a  |PDX   |
|b  |noClue|
+---+------+

您只需使用+---+----+ |key|Name| +---+----+ |a |SYD | |b |AKL | +---+----+ join Key并使用withColumnwhen功能

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     |
+---+------+--------+