无论密钥如何,Spark总结值

时间:2015-12-08 04:28:59

标签: apache-spark pyspark

我的元组列表如下所示:

Tup = [(u'X45', 2), (u'W80', 1), (u'F03', 2), (u'X61', 2)]

我希望将所有值加起来,在本例中为2+1+2+2=7

如果密钥相同,我可以在spark中使用Tup.reduceByKey()。但是,无论密钥如何,我可以在spark中使用哪个函数来汇总所有值?

我已尝试Tup.sum(),但它给了我(u'X45', 2, u'W80', 1, u'F03', 2, u'X61', 2)

BTW由于数据集较大,我想在RDD中总结一下,所以我不会在Spark中使用Tup.collect()sum

1 个答案:

答案 0 :(得分:7)

这很简单。

从概念上讲,您应首先在原始RDD上进行映射并提取第二个值。然后总结那些

在Scala中

val x = List(("X45", 2), ("W80", 1), ("F03", 2), ("X61", 2))
val rdd = sc.parallelize(x)
rdd.map(_._2).sum()

在Python中

x = [(u'X45', 2), (u'W80', 1), (u'F03', 2), (u'X61', 2)]
rdd = sc.parallelize(x)
y = rdd.map(lambda x : x[1]).sum()

在这两种情况下都会打印7的总和。