我使用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_PK
和product2_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")
答案 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 |
+-----------+-----------+-------------+-------------+