我还是Spark/PySpark的新手,并且有以下问题。我买了ID's嵌套页清单:Spark/PySpark:由任何嵌套列表项组
result = [[411, 44, 61], [42, 33], [1, 100], [44, 42]]
我正尝试实现的事情是,如果子表的任何项目在另一个子列表中的项目相匹配的双方应该合并。结果应如下所示:
merged_result = [[411, 44, 61, 42, 33, 44, 42], [1,100]]
“result”中的第一个列表与第四个列表匹配。第四个列表与第二个列表匹配,因此所有3个列表应合并成一个列表。第三个列表与其他列表不匹配,所以它保持不变。
我可以通过用Python编写循环来实现这一点。
result_after_matching = []
for i in result:
new_list = i
for s in result:
if any(x in i for x in s):
new_list = new_list + s
result_after_matching.append(set(new_list))
#merged_result = [[411, 44, 61, 42], [42,33,44], [1, 100], [44,42,33,411,61]]
由于这不是期望的输出,我需要重复循环,再做另一组()公开了“merged_result”)
set([[411,44,61,42,33], [42,33,44,411,61],[1,100], [44,42,33,411,61]])
-> [[411, 44, 61, 42, 33], [1,100]]
随着名单的名单,和子列表获取随着新数据的传入,时间越来越大,这不会是使用的功能。
任何人都可以告诉我,如果有一个函数,在火花/ Pyspark,匹配/合并/ groupby /减少这些嵌套列表更容易和更快?
非常感谢! MG
您的解决方案运行得非常快!即使有3k +列表。唯一没有用到真实例子的是单值表(例如[57]),其中没有包含输出,你有任何解释吗?!单值意味着此ID不在任何其他列表中。所以我只是在我使用你的代码之前将这个列表分成两部分,然后再将它们合并。 – mgruber
此外,我尝试使用GraphX,但它如你所说没有在Python中工作。不知何故,我只能在我们的发行版中使用基于“Python”的脚本。我会和我们的分销架构师谈谈。 – mgruber