我什至不知道表达这些问题的最佳标题是什么。
我有以下数据集
df = spark.createDataFrame([\
(["1", "2","3","4"], ),\
(["1","2","3"], ),\
(["2","1","3"], ),\
(["2","3","4","1"], ),\
(["6","7"], )\
], ['cycle', ])
df.show()
+------------+
| cycle|
+------------+
|[1, 2, 3, 4]|
| [1, 2, 3]|
| [2, 1, 3]|
|[2, 3, 4, 1]|
| [6, 7]|
+------------+
我最后想要的是:
- 删除排列
- 仅保留包含所有其他集合的最大行的行
我可以用sort_array()
and distinct()
摆脱排列
df.select(f.sort_array("cycle").alias("cycle")).distinct().show()
+------------+
| cycle|
+------------+
|[1, 2, 3, 4]|
| [6, 7]|
| [1, 2, 3]|
+------------+
我想用 Pyspark 减少数据集是:
+------------+
| cycle|
+------------+
|[1, 2, 3, 4]|
| [6, 7]|
+------------+
所以以某种方式检查一下[1, 2, 3]
是其一部分[1, 2, 3, 4]
并且只保留
所以Python子集命令A.issubset(B)
应用在Pyspark、Spark方式上一列
我目前能想到的唯一方法是对每一行进行可怕的迭代循环,这将杀死所有性能