如何为我的案例正确加入两个DataFrame?

时间:2017-11-24 08:57:08

标签: scala apache-spark dataframe

我使用Spark 2.2.0和Scala 2.11.8。我在加入两个DataFrame时遇到了一些问题。

df1 = 

product1_PK   product2_PK
111           222
333           111
...

df2 = 

product_PK    product_name
111           AAA
222           BBB
333           CCC

我想得到这个结果:

product1_PK   product2_PK    product1_name    product2_name
111           222            AAA              BBB
333           111            CCC              AAA
...

我该怎么做?

这是我尝试作为零件解决方案的方式,但我不知道如何有效地加入product1_PKproduct2_PK并重命名列:

val result = df1.as("left")
  .join(df2.as("right"), $"left.product1_PK" === $"right.product_PK")
  .drop($"left.product_PK")
  .withColumnRenamed("right.product_name","product1_name")

1 个答案:

答案 0 :(得分:1)

您需要使用两个join:第一个用于product1_name,第二个用于product2_name

df1.join(df2.withColumnRenamed("product_PK", "product1_PK").withColumnRenamed("product_name", "product1_name"), Seq("product1_PK"), "left")
  .join(df2.withColumnRenamed("product_PK", "product2_PK").withColumnRenamed("product_name", "product2_name"), Seq("product2_PK"), "left")
  .show(false)

您应该将所需的输出设为

+-----------+-----------+-------------+-------------+
|product2_PK|product1_PK|product1_name|product2_name|
+-----------+-----------+-------------+-------------+
|222        |111        |AAA          |BBB          |
|111        |333        |CCC          |AAA          |
+-----------+-----------+-------------+-------------+