簡體   English   中英

reduceByKey RDD 火花 scala

[英]reduceByKey RDD spark scala

我有RDD[(String, String, Int)]並且想使用 reduceByKey 來獲得如下所示的結果。 我不希望它轉換為 DF 然后執行 groupBy 操作來獲得結果。 Int是常數,其值始終為 1。

是否可以在這里使用 reduceByKey 來獲得結果? 以表格形式呈現以方便閱讀

問題

細繩 細繩 詮釋
第一的 蘋果 1
第二 香蕉 1
第一的 1
第三 1

結果

細繩 細繩 詮釋
第一的 蘋果,花 2
第二 香蕉 1
第三 1

如果您有 Tuple3,則不能使用reduceByKey ,但如果您有RDD[(String, String)]則可以使用reduceByKey

此外,一旦你groupBy ,你就可以應用reduceByKey ,但由於鍵是唯一的,調用reduceByKey是沒有意義的,因此我們使用map到 map 一對一的值。

所以,假設df是你的主表,那么這段代碼:

val rest = df.groupBy(x => x._1).map(x => {
  val key = x._1 // ex: First
  val groupedData = x._2 // ex: [(First, Apple, 1), (First, Flower, 1)]

  // ex: [(First, Apple, 1), (First, Flower, 1)] => [Apple, Flower] => Apple, Flower
  val concat = groupedData.map(d => d._2).mkString(",")
  // ex: [(First, Apple, 1), (First, Flower, 1)] => [1, 1] => 2
  val sum = groupedData.map(d => d._3).sum

  (key, concat, sum) // return a tuple3 again, same format
})

返回此結果:

(Second,Banana,1)
(First,Apple,Flower,2)
(Third,Tree,1)

祝你好運!

暫無
暫無

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

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