簡體   English   中英

Scala Spark獲得Array每行中的熱門單詞

[英]scala Spark get the top words in each row of Array

我無法獲得int和Strings數組中的最高字。

請參見下面的數組和所需的輸出:考慮n為RDD並建議我獲取輸出的Required函數。

scala> n.take(10)
res3: Array[(Int, String)] = Array((4,Hi how are you ,how), (2,hello good good to hear good))

O / P:Array((4,how),(2,good))// Ist行中的最高單詞如何.. good是第二行中的最高單詞。

我們可以使用以下代碼來獲取唯一的最高單詞,但我想在每一行中都希望獲得最高的單詞。

val msg = n.map{case(val1, val2) => (val2).mkString("")}
val words =msg.flatMap(x => x.split(" "))
val result = words.map(x => (x, 1)).reduceByKey((x, y) => x + y)
val sortReuslts=result.sortBy(x => (-x._2,x._1))

謝謝 :)

首先創建一個函數來查找給定文本中的最大頻率單詞:

def findMaxFrequencyWord(text: String): (String, Int) = {
    text.split("\\W+")
        .map(x => (x, 1))
        .groupBy(y => y._1)
        .map{ case (x,y) => x -> y.length }
        .toArray
        .sortBy(x => -x._2)
        .head 
}

findMaxFrequenceWord("hi, how are you, how")
> (how, 2)

創建(Int, String) rdd:

val arr = Array((4, "how how ok"), (3, "i see, you see"), (5, "fine, it is fine"))

val n = sc.parallelize(arr)  

在rdd中的每個String中查找最大頻繁單詞:

val result = n.map{ case (x, y)  => x -> findMaxFrequencyWord(y)._1 }

result.take(3)

> Array[(String, Int)] = Array((4, how), (3, see), (5, fine))

暫無
暫無

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

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