Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Spark中记录间的整数求和_Python_Apache Spark_Pyspark - Fatal编程技术网

Python 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,

我正在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, 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的以下工作有所帮助。