【发布时间】:2020-09-16 02:23:27
【问题描述】:
我有 2 个具有相同列名的 spark 数据框,并且希望在键列相互匹配时使用 df2 中同一列中的列表来扩展第一个 df 中的某些列。
df1:
+----+---+--++------+---------+-----+--------+--------+-------+
|k1 | k2 |list1 | list2 |list3|list4 |list5 |list 6 |
+----+---+--+-------+---------------------------------+-------+
| a| 121 |[car1] |[price1] |[1] |[False] |[0.000] |[vfdvf]|
| b| 11 |[car3] |[price3] |[2] |[False] |[1.000] |[00000]|
| c| 23 |[car3] |[price3] |[4] |[False] |[2.500] |[fdabh]|
| d| 250 |[car6] |[price6] |[6] |[True] |[0.450] |[00000]|
+----+---+--++----+---+--+--++----+---+------+----------------+
df2:
+----+---+--++------+---------+-----+--------+--------+-------+
|k1 | k2 |list1 | list2 |list3|list4 |list5 |list 6 |
+----+---+--+-------+---------------------------------+-------+
| m| 121 |[car5] |[price5] |[5] |[False] |[3.000] |[vfdvf]|
| b| 11 |[car8] |[price8] |[8] |[False] |[2.000] |[mnfaf]|
| c| 23 |[car7] |[price7] |[7] |[False] |[1.500] |[00000]|
| n| 250 |[car9] |[price9] |[9] |[False] |[0.450] |[00000]|
+----+---+--++----+---+--+--++----+---+------+----------------+
由于包含项目列表的列彼此相关,因此订单必须保持不变。有没有办法只有当 key1 和 key2 在两个 dfs 之间匹配时才能将整个列表从 df2 附加到 df1?
结果应如下所示(我无法放入列表 6 列,但希望在结果中看到与其他列表列相同的模式):
+--+--+-----------+---------------+-----+------------+--------------+
|k1|k2|list1 | list2 |list3|list4 |list5 |
+--+--+-----------+---------------+-----+------------+--------------+
|b |11|[car3,car8]|[price3,price8]|[2,8]|[False,False]|[1.000,2.000]|
|c |23|[car3,car7]|[price3,price7]|[4,7]|[False,False]|[2.500,1.500]|
+--+--+-----------+---------------+-----+-------------+-------------+
我仍然是使用 UDF 的新手,在 stackoverflow 上找不到类似的问题,我发现的唯一类似的问题是使用 pandas(How to merge two list columns when merging DataFrames?),这对我的用例来说超级慢。对此的任何见解将不胜感激。
【问题讨论】:
标签: pyspark apache-spark-sql user-defined-functions pyspark-dataframes