我正在学习 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)