2015-02-10 19 views
0

我无法获取int和字符串数组中的顶部单词。scala Spark获取阵列中每行的顶部单词

请参阅下面的数组和要求的输出: 考虑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:阵列((4,如何),(2,好))//如何在IST行顶端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)) 

谢谢:)

回答

2

让我们首先创建一个函数来找出给定文本的最大频率字:

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) 

创建RDD的(Int, String)

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)) 
+0

谢谢@ Shyamendra Solanki非常有帮助...只是一个简单的问题如果我想要顶级N温度,我应该使用WHCIH方法,我试着用..拿(n)它没有给..请建议我..再次感谢您的快速响应:) – MapReddy 2015-02-10 18:16:16

+1

@MapReddy如果您需要排名前N的词,在'sortBy'之后用'take(N)'替换'head',假设每个字符串至少有N个不同的词。 – 2015-02-11 13:05:34

+0

谢谢 - @ Shyamendra Solanki – MapReddy 2015-02-13 09:22:32