Python Spark中记录间的整数求和
我正在Cloudera QuickStart VM中使用Spark控制台。在下面的示例输出中,您将看到使用代码获得的两列数据:Python Spark中记录间的整数求和,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在Cloudera QuickStart VM中使用Spark控制台。在下面的示例输出中,您将看到使用代码获得的两列数据: channel_views.filter(lambda x: "XYZ" == x[1]).take(10) 目标是折叠此数据集,使其仅显示一行唯一的“XYZ”以及与“XYZ”相关的所有数字的相应总和。我们如何获得这一点 样本输出: [(1038, u'XYZ'), (415, u'XYZ'), (100, u'XYZ'), (597, u'XYZ'), (786,
channel_views.filter(lambda x: "XYZ" == x[1]).take(10)
目标是折叠此数据集,使其仅显示一行唯一的“XYZ”以及与“XYZ”相关的所有数字的相应总和。我们如何获得这一点
样本输出:
[(1038, u'XYZ'),
(415, u'XYZ'),
(100, u'XYZ'),
(597, u'XYZ'),
(786, u'XYZ'),
(163, u'XYZ'),
(884, u'XYZ'),
(345, u'XYZ'),
(534, u'XYZ'),
(947, u'XYZ')]
您需要减少输出,可能最简单的方法是将(
map
)转换为键、值对,然后再转换为reduceByKey
,例如:
>>> from operator import add
>>> rdd = sc.parallelize([(1038, u'XYZ'), ...])
>>> (rdd.filter(lambda x: "XYZ" == x[1])
... .map(lambda x: (x[1], x[0]))
... .reduceByKey(add).collect())
[('XYZ', 5809)]
或者您可以在reduce
中定义更复杂的函数:
>>> (rdd.filter(lambda x: "XYZ" == x[1])
... .reduce(lambda x, y: (x[0]+y[0], x[1]))
(5809, 'XYZ')
为我们的工作提供一些示例输入。感谢您联系Pangea。然而,AChampion的以下工作有所帮助。