![](/img/trans.png)
[英]Using a for loop to count the number of total letters and the number of a specific letter\
[英]Spark: count number of specific letter in RDD using aggregate function
我正在使用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()
現在,我必須做同樣的事情,但要使用“聚集”功能。 但是我不知道這是怎么做到的。 有任何想法嗎?
rdd
.aggregate(0, lambda i, x: i + x[0].count('s'), lambda i, j: i+j)
我沒有嘗試過,但是應該很簡單。 第一個參數是zeroValue,在本例中為0
,因為結果類型是整數。 接下來是每個分區內的累加函數-在我們的示例中,對每行( x
)上的字母s
進行計數,然后將其加到累加的計數( i
)中。 最后一個函數合並了所有分區的結果,在我們的例子中還是簡單的總和。
值得一提的是,PySpark在Spark官方網站上擁有出色的文檔,您可以在此處找到答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.