小编cra*_*man的帖子

Spark 中每个文档的字数统计

我正在学习 Spark(在 Scala 中),并一直试图弄清楚如何计算文件每一行上的所有单词。我正在使用一个数据集,其中每行包含一个制表符分隔的 document_id 和文档的全文

doc_1   <full-text>
doc_2   <full-text>
etc..
Run Code Online (Sandbox Code Playgroud)

这是我在名为 doc.txt 的文件中的玩具示例

doc_1   new york city new york state
doc_2   rain rain go away
Run Code Online (Sandbox Code Playgroud)

认为我需要做的是转换成包含ig的元组

((doc_id, word), 1)
Run Code Online (Sandbox Code Playgroud)

然后调用reduceByKey()对1进行求和。我写了以下内容:

val file = sc.textFile("docs.txt")
val tuples = file.map(_.split("\t"))
            .map( x => (x(1).split("\\s+")
            .map(y => ((x(0), y), 1 ))   ) )
Run Code Online (Sandbox Code Playgroud)

这确实给了我我认为我需要的中间表示:

tuples.collect

res0: Array[Array[((String, String), Int)]] = Array(Array(((doc_1,new),1), ((doc_1,york),1), ((doc_1,city),1), ((doc_1,new),1), ((doc_1,york),1), ((doc_1,state),1)), Array(((doc_2,rain),1), ((doc_2,rain),1), ((doc_2,go),1), ((doc_2,away),1)))
Run Code Online (Sandbox Code Playgroud)

但是如果在元组上调用reduceByKey则会产生错误

tuples.reduceByKey(_ + )
<console>:21: error: value reduceByKey is not …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark

5
推荐指数
1
解决办法
6088
查看次数

标签 统计

apache-spark ×1

scala ×1