簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM