scala Spark 获取数组每一行中的顶部单词
scala Spark get the top words in each row of Array
我无法获取 int 和字符串数组中的第一个单词。
查看下面的数组和所需的输出:
考虑 n 是一个 RDD,并建议我获取输出所需的函数。
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)) // 第一行的 Top word 怎么样 .. good 是第二行的 Top word .
我们可以使用以下代码来获取唯一的最高词,但我想在每一行中获得最高词。
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中每个字符串中的最大频繁词:
val result = n.map{ case (x, y) => x -> findMaxFrequencyWord(y)._1 }
result.take(3)
> Array[(String, Int)] = Array((4, how), (3, see), (5, fine))
我无法获取 int 和字符串数组中的第一个单词。
查看下面的数组和所需的输出: 考虑 n 是一个 RDD,并建议我获取输出所需的函数。
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)) // 第一行的 Top word 怎么样 .. good 是第二行的 Top word .
我们可以使用以下代码来获取唯一的最高词,但我想在每一行中获得最高词。
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中每个字符串中的最大频繁词:
val result = n.map{ case (x, y) => x -> findMaxFrequencyWord(y)._1 }
result.take(3)
> Array[(String, Int)] = Array((4, how), (3, see), (5, fine))