[英]Is there a way to join two spark dataframes with custom join for each row
我有两个数据帧 df 和 df2 如下
+------+---+----+
| name|age|city|
+------+---+----+
| John| 25| LA|
| Jane| 26| LA|
|Joseph| 28| SA|
+------+---+----+
+---+----+------+
|age|city|salary|
+---+----+------+
| 25| LA| 40000|
| 26| | 50000|
| | SF| 60000|
+---+----+------+
我想要我的结果数据框如下
+------+---+----+------+
| name|age|city|salary|
+------+---+----+------+
| John| 25| LA| 40000|
| Jane| 26| LA| 50000|
|Joseph| 28| SF| 60000|
+------+---+----+------+
基本上在这里我需要使用年龄、城市作为连接列进行连接,但是如果 df2 中的任何一列为空,那么我只需要与另一个非空列连接。 即使有大约 5 列要加入,我正在寻找的解决方案也应该适用,只有非空列应该参与每行的连接。
当您加入这些数据框然后选择需要 groupBy 时,您可以提供更多条件。
df1.join(df2,
($"age" === $"age2" || $"age2".isNull) &&
($"city" === $"city2" || $"city2".isNull), "left")
.show
结果将是:
+------+---+----+----+-----+-------+
| name|age|city|age2|city2|salary2|
+------+---+----+----+-----+-------+
| John| 25| LA| 25| LA| 40000|
| Jane| 26| LA| 26| null| 50000|
|Joseph| 28| SF|null| SF| 60000|
+------+---+----+----+-----+-------+
但是当你有更多的列或者第二个数据帧有更多的空值时,结果会更复杂。
df1.join(df2,df1.col("age")===df2.col("age") || df1.col("city")===df2.col("city")).select(df1.col("name"),df1.col("age"),df1.col("city"),df2.col("salary")).show
+----+---+----+------+
|name|age|city|salary|
+----+---+----+------+
|john| 25| LA| 40000|
|Jane| 26| LA| 40000|
|Jane| 26| LA| 50000|
+----+---+----+------+```
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.