2014-02-18 34 views
3

我想在斯卡拉编写字数统计程序。我使用一个字符串"file"斯卡拉:值分裂不是字符的成员

file.map(_.split(" ")).flatMap(word => (word, 1)).reduceByKey(_ + _) 

它一直说:

值分割是不是char

成员

无法弄清楚如何解决呢!

+0

为什么直接使用带'.split'而不是'.split'的'.map'?地图对字符串的各个字符进行操作。 –

回答

3

当您在String上致电map时,它包装有WrappedString,其延伸AbstractSeq[Char]。因此,当您拨打map时,就好像您在的而不是SeqString这样做。

请参见下面的链接代码https://github.com/scala/scala/blob/v2.10.2/src/library/scala/collection/immutable/WrappedString.scala

通过下面的空格分割的代码,并返回该尺寸,一个字计数器。

val file = "Some test data" 
file.split("\\s+").size 

获得字符串中每个单词出现次数的计数。

val file = "Some test data test" 
println(file.split("\\s+").toList.groupBy(w => w).mapValues(_.length)) 
+0

非常感谢你帮助我,但现在我想减少BKey!它给我错误说:reduceByKey不是scala.collection.immutable.Map [String,Int]的成员。我添加了:.reduceByKey(_ + _) – Brigitte

+0

你得到这个错误的原因是因为没有这样的方法。请参阅http://www.scala-lang.org/api/2.10.2/index.html#scala.collection.immutable.Map以供参考。 –

+0

谢谢戴夫。我使用spark上下文在火花上运行我的程序。当我把它放在那里时,我再也没有任何错误,但我需要弄清楚为什么数据不正确! – Brigitte

0

我发现代码是完美的!仅仅因为我在Spark上运行它,答案被保存在我需要以某种方式收集它的懒惰RDD文件中。因此,我将它保存到一个文本文件并解决问题!下面是代码:

file.flatMap(线=> line.split(” “))的地图(W =>(瓦特,1))reduceByKey(+).saveAsTextFile(”。OUT.txt “)

谢谢。

相关问题