我在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')]
答案 0 :(得分:0)
您需要减少输出,最简单的方法是将([
)转换为键值对,然后转换为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