我是pyspark的新手,正在研究RDD的练习。我有一个RDD,其中“key”是一个值对,“value”是任意长度的值对列表。我希望计算每个“值”中的值对的数量,并计算count> = 3的值。我有解决方案,但我可以提高效率吗?
myRddGroupedByKey:
(( (150,300), ((275,1),(30,25)) ),
( (50,100), ((50,30),(125,20),(55,50)) ),
( (10,20), ((500,300),(15,2),(5,0)) )
)
期望的结果:
(( (50,100), 3 ),
( (10,20), 3 )
)
我使用python3的解决方案部分来自我在这里找到的样本:
countVals=dict(myRddGroupedByKey.mapValues(lambda x : len(x)).collect())
print({k: v for k, v in countVals.items() if v >= 3})
发布于 2018-08-21 16:26:42
可以在collect
之前使用该筛选器。这可能会减少提交到头/驱动程序节点的数据量:
myRddGroupedByKey.mapValues(len).filter(lambda x: x[1] >= 3).collect()
# [((50, 100), 3), ((10, 20), 3)]
https://stackoverflow.com/questions/-100002330
复制相似问题