我有一个 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}] |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
您可以尝试嵌套来
transform
创建笛卡尔积。这将产生一个嵌套数组,您可以使用它
flatten
来获取最终的单个数组。结果
您可以分解两个数组列,添加一个包含 a1 和 a2 集合的新列,然后通过再次聚合将这些集合以及分解后的 a1 和 a2 收集到列表中。确保有一列来区分组(例如 a1 和 a2 的哈希值),这样就不会将重复的 a1 值聚合为一个。