python - 如何使用 Pyspark 在列表中获取唯一组合?
问题描述
我正在使用下面的 python 代码从列表中获取唯一的组合。
import itertools
unique_combinations = []
ss = [['0_20F','1_20F','2_20F','3_20F','4_20F','5_20F','6_20F','7_20F','8_20F','9_20F','10_20F'],
['0_40F','1_40F','2_40F','3_40F','4_40F','5_40F','6_40F','7_40F','8_40F', '9_40F','10_40F'],
['0_40HC','1_40HC','2_40HC','3_40HC','4_40HC','5_40HC','6_40HC','7_40HC','8_40HC', '9_40HC','10_40HC']]
for l in list(itertools.product(*ss)):
unique_combinations.append(l)
print(l)
示例输出如下。
('0_20F', '0_40F', '0_40HC')
('0_20F', '0_40F', '1_40HC')
('0_20F', '0_40F', '2_40HC')
('0_20F', '0_40F', '3_40HC')
('0_20F', '0_40F', '4_40HC')
('0_20F', '0_40F', '5_40HC')
('0_20F', '0_40F', '6_40HC')
('0_20F', '0_40F', '7_40HC')
('0_20F', '0_40F', '8_40HC')
('0_20F', '0_40F', '9_40HC')
我需要使用 pyspark 完成这项工作。是否可以通过 pyspark 完成?
解决方案
可以为新数据框中的每个列表ss
创建。之后,所有数据帧都可以交叉连接:
dfs = [spark.createDataFrame([[s] for s in ssx], schema=[f"col_{i}"])
for i, ssx in enumerate(ss)]
import functools
result = functools.reduce(lambda l,r: l.crossJoin(r), dfs )
result.show(5)
#+-----+-----+------+
#|col_0|col_1| col_2|
#+-----+-----+------+
#|0_20F|0_40F|0_40HC|
#|0_20F|0_40F|1_40HC|
#|0_20F|1_40F|0_40HC|
#|0_20F|1_40F|1_40HC|
#|1_20F|0_40F|0_40HC|
#+-----+-----+------+
#only showing top 5 rows
推荐阅读
- react-native - React Native Android - 生命周期方法
- python - Google 日历 API 全天活动时区
- linux - 使用绑定挂载的主机目录和容器之间的 Docker 文件权限不匹配
- amazon-cloudwatch - 为什么 fluentd-cloudwatch Kube deamonSet 无法将日志从指定目录发送到 cloudwatch?
- c - 为什么不满足if条件?
- c++ - "(void) cast" 与 "__attributes__" 用于消除未使用的参数警告之间的功能区别是什么?
- react-native - 实现 react-native 渲染日历周视图
- python - Python:将以下字符串转换为字典的优雅解决方案
- flutter - 如何从本地文件的目录中导入 dart 文件?
- c++ - c++中的多重递归