我正在使用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'函数。但是我不知道这是怎么做到的。有什么想法吗?
答案 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官方网站上拥有出色的文档,您可以在此处找到答案。