我本來的格式如下一組記錄:計數發生 - 阿帕奇星火斯卡拉
(Title, Text)
哪裏Title
是這本書的名字和Text
是其描述。
我已經統計Text
字段中的每個Word
的發生次數爲Title
。它是按以下格式:
((Word, Title), WordCount)
現在,我要算獨特的書Titles
具有Word
從Text
發生的數量。然後將其存儲格式爲:
((Word, Title), TitleCount)
哪裏Count
是有這個Word
的Titles
數量。 我想這些信息存儲在一個文件TitleCount.txt
要計算TitleCount
val idfRdd = yourRdd.flatMap(title => (title, scala.math.log(N/(file.filter(_.split("\t")(1).contains(title.split(",")))))))
凡N = fixed number (20)
但這個代碼無法給出錯誤:
scala> val idfRdd = yourRdd.flatMap(title => (title, scala.math.log(N/(file.filter(_.split("\t")(1).contains(title.split(",")))))))
<console>:31: error: value split is not a member of (String, String)
val idfRdd = yourRdd.flatMap(title => (title, scala.math.log(N/(file.filter(_.split("\t")(1).contains(title.split(",")))))))
^
UPDATE
我嘗試這樣做,以及:
val r = splitRdd.flatMap(arr => {
val title = arr(0)
val text = arr(1)
val words = text.split(" ")
words.map(word => ((word, title), scala.math.log(N/(file.filter(_.split("\t")(1).contains(word))).count))) })
上面的代碼編譯,但在運行時出現故障。
Title
可能包含","
但這將是一個簡單的正則表達式修復。乘以計數字段
val file = sc.textFile("s3n://bucket/test.txt") // RDD[ String ]
val splitRdd = file.map(line => line.split("\t")) // RDD[ Array[ String ]
val yourRdd = splitRdd.flatMap(arr => {
val title = arr(0)
val text = arr(1)
val words = text.split(" ")
words.map(word => (word, title))
})
// RDD[ (String, String) ]
val countRdd = yourRdd.map(title => (title, 1)).reduceByKey(_ + _)
countRdd.saveAsTextFile("s3n://bucket/wordcount.txt")
進一步閱讀
我想然後合併這兩個文件TitleCount.txt
和WordCount.txt
: 爲了獲得個人字數每一個標題,我寫了下面的代碼兩份文件。 這給我們:
FinalCount.txt
((Word, Title), WordCount * TitleCount)
這是一個實際的乘法,而不是爲代表的目的。
有人可以幫我解決這個問題嗎? 謝謝!
你的問題的一些清理將有助於如果我在錯誤的軌道是... –