我有一个pypsark Dataframe ,如下所示:
| name|segment_list|rung_list |
+--------------------+------------+-----------+
| Campaign 1 | [1.0, 5.0]| [L2, L3]|
| Campaign 1 | [1.1]| [L1]|
| Campaign 2 | [1.2]| [L2]|
| Campaign 2 | [1.1]| [L4, L5]|
+--------------------+------------+-----------+
我有另一个pyspark Dataframe ,其中包含每个客户的段和梯级:
+-----------+---------------+---------+
|customer_id| segment |rung |
+-----------+---------------+---------+
| 124001823| 1.0| L2|
| 166001989| 5.0| L2|
| 768002266| 1.1| L1|
+-----------+---------------+---------+
我想要的是一个最终输出,它根据细分和梯级列表计算出客户。最终输出应该如下所示:
| name|customer_id |
+--------------------+------------+
| Campaign 1 | 124001823 |
| Campaign 1 | 166001989 |
| Campaign 1 | 768002266 |
+--------------------+------------+
我试过使用udf,但是这种方法不太管用。我希望避免在collect操作中使用for循环,或者逐行进行操作。所以我主要是在name列上寻找groupby操作。
因此,我希望有一种更好的方法来执行以下操作:
for row in x.collect():
y = eligible.filter(eligible.segment.isin(row['segment_list'])).filter(eligible.rung.isin(row['rung_list']))
1条答案
按热度按时间7vhp5slm1#
您可以尝试使用
array_contains
作为连接条件。下面是一个示例
粘贴Spark生成的查询计划
似乎没有很好的优化,我想可以有其他的优化方法。