簡體   English   中英

用於Apache Spark的reduceByKey()中的模式匹配Scala(key,Tuple2)值

[英]Pattern matching Scala (key, Tuple2) values in reduceByKey() for Apache Spark

我有一個包含(stockName, stockValue)元組的RDD。 許多股票是重復的,並且具有不同的價值。

例如("ARM", 200.6) ("GOOG", 4000.4) ("ARM", 3998.23) ("ARM", 4002.45)等。

這個想法是收集所有類似的股票並計算它們的平均值。

在下面的代碼中, map將每只股票轉換為(key, (total, 1))

例如("ARM", (200.6, 1))

reduceByKey匯總具有相同名稱的所有股票,並獨立地對它們的價值和數量進行求和。 輕松計算每種股票的平均值(代碼未顯示)。

val partial = stocks.map{ case(stock: String, value: Double) => (stock, (value, 1)) } .reduceByKey( (x, y) => (x._1 + y._1, x._2 + y._2) )

map我已經能夠使用模式匹配來清楚地表達轉換。 我希望能夠對傳遞給reduceByKey的function參數做同樣的事情,以使其更具可讀性。

到目前為止,我還無法改進(x, y) => (x._1 + y._1, x._2 + y._2)

有什么建議么?

您可以嵌套模式以將(x, y)解構為((x1, x2), (y1, y2))

val partial = stocks.map {
  case (stock, value) => stock -> (value, 1)
}.reduceByKey {
  case ((value1, count1), (value2, count2)) => (value1 + value2, count1 + count2)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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