Pyspark 数据框中两列的笛卡尔积

问题描述 投票:0回答:1

我有一个 pyspark DataFrame,其中包含列,每个列都是一个字符串数组,如何创建一个新列,它是它们的笛卡尔积,而不将它们拆分为两个数据帧并连接它们,并且没有 udf?

示例:

In df:
Df
+---+---+---+---+-
| a1    | a2     |
+---+---+---+---+-
|[1, 2]|[3, 4, 5]|
|[1, 2]|[7, 8]   |
+---+---+---+---+-

Out df:
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
| a1    | a2     | a3                                               |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|[1, 2]|[3, 4, 5]|[{1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}]  |
|[1, 2]|[7, 8]   |[{1, 7}, {1, 8}, {2, 7}, {2, 8}]                  |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
pyspark cartesian-product
1个回答
0
投票

您可以分解两个数组列,添加一个包含 a1 和 a2 集合的新列,然后通过再次聚合将这些集合以及分解后的 a1 和 a2 收集到列表中。确保有一列来区分组(例如 a1 和 a2 的哈希值),这样就不会将重复的 a1 值聚合为一个。

© www.soinside.com 2019 - 2024. All rights reserved.