Spark:使用聚合函数计算RDD中特定字母的数量

时间:2018-06-23 12:25:35

标签: python apache-spark rdd

我正在使用Python在Apache Spark中进行简单的分配。假设我有一个RDD:

[('python', 1), ('spark', 1), ('context', 1), ('create', 1), ('scala', 1), ('parallel', 1), ('operation', 1), ('apache', 1), ('partition', 1), ('lambda', 1), ('class', 1), ('rdd', 1)]

我想计算RDD中字母“ s”的出现次数。使用“地图”,我会这样:

rdd = sc.parallelize([('python', 1), ('spark', 1), ('context', 1), ('create', 1), ('scala', 1), ('parallel', 1), ('operation', 1), ('apache', 1), ('partition', 1), ('lambda', 1), ('class', 1), ('rdd', 1)])
rdd.map(lambda x: x[0].count('s')).sum()

现在,我必须做同样的事情,但是要使用'aggregate'函数。但是我不知道这是怎么做到的。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

rdd
  .aggregate(0, lambda i, x: i + x[0].count('s'), lambda i, j: i+j)

我没有尝试过,但是应该很简单。第一个参数是zeroValue,或者在我们的例子中只是0,因为结果类型是整数。接下来是每个分区中的累加函数-在我们的例子中,对每一行(s)上的字母x进行计数,然后将其加到累加计数(i)中。最后一个函数合并了所有分区的结果,在我们的例子中还是简单的总和。

值得一提的是,PySpark在Spark官方网站上拥有出色的文档,您可以在此处找到答案。