【发布时间】:2020-02-11 23:46:31
【问题描述】:
我尝试将两个数据框合并到一个不具有完全相同值的列。
下面给出的是DF1
+--------+-----+------+
| NUM_ID | TIME|SG1_V |
+--------+-----+------+
|XXXXX01 |1001 |79.0 |
|XXXXX01 |1005 |88.0 |
|XXXXX01 |1010 |99.0 |
|XXXXX01 |1015 |null |
|XXXXX01 |1020 |100.0 |
|XXXXX02 |1001 |81.0 |
|XXXXX02 |1010 |91.0 |
|XXXXX02 |1050 |93.0 |
|XXXXX02 |1060 |93.0 |
|XXXXX02 |1070 |93.0 |
+--------+-----+------+
下面是DF2
+---------+-----+------+
| NUM_ID | TIME|SG2_V |
+---------+-----+------+
|XXXXX01 |1001 | 99.0|
|XXXXX01 |1003 | 22.0|
|XXXXX01 |1007 | 85.0|
|XXXXX01 |1011 | 1.0 |
|XXXXX02 |1001 | 22.0|
|XXXXX02 |1009 | 85.0|
|XXXXX02 |1048 | 1.0 |
|XXXXX02 |1052 | 99.0|
+---------+-----+------+
我必须在 NUM_ID 列上加入这两个 DF,这应该完全相同,在 TIME 列上可能/可能不是确切值。
DF2 中的 TIME 可能包含也可能不包含与 DF1 中的精确值。如果该值不准确,我必须加入可用的最接近的值(即 - DF2 中的列值应该 =
看了下图的预期输出会更清楚。
+--------+-----+------+-----+------+
| NUM_ID | TIME|SG1_V | TIME|SG2_V |
+--------+-----+------+-----+------+
|XXXXX01 |1001 |79.0 |1001 | 99.0|
|XXXXX01 |1005 |88.0 |1003 | 22.0|
|XXXXX01 |1010 |99.0 |1007 | 85.0|
|XXXXX01 |1015 |null |1011 | 1.0 |
|XXXXX01 |1020 |100.0 |1011 | 1.0 |
|XXXXX02 |1001 |81.0 |1001 | 22.0|
|XXXXX02 |1010 |91.0 |1009 | 85.0|
|XXXXX02 |1050 |93.0 |1048 | 1.0 |
|XXXXX02 |1060 |93.0 |1052 | 99.0|
|XXXXX02 |1070 |93.0 |1052 | 99.0|
+--------+-----+------+-----+------+
对于NUM_ID XXXXX01,DF1中的TIME(1005)在DF2中是不可用的,所以它取的是小于1005的最接近的值(1003)。
如何加入,如果没有确切的值,则使用最接近的值加入。
欣赏任何潜在客户。 提前致谢。
【问题讨论】:
标签: scala dataframe apache-spark hive apache-spark-sql