2017-05-24 38 views
0

如何使用Spark/Scala來計算文件中的所有字符?下面是我在火花外殼上做的事情:使用Spark/scala計算文件中的所有字符?

scala> val logFile = sc.textFile("ClasspathLength.txt") 
scala> val counts = logFile.flatMap(line=>line.split("").map(char=>(char,1))).reduceByKey(_ + _) 
scala> println(counts.count()) 
scala> 62 

我在這裏得到不正確的計數。有人可以幫我解決這個問題嗎?

+0

什麼是你想實現 - 你試圖讓(1)在文件中字符的總數;或(2)_distinct_字符的數量;或(3)每個不同字符在文件中出現的次數? –

+0

我只需要文件中的全部字符。 – dganesh2002

回答

1

你在做什麼這裏是:

  1. 計數每個唯一的字符出現在輸入的次數:

    val counts = logFile.flatMap(line=>line.split("").map(char=>(char,1))).reduceByKey(_ + _) 
    

    然後:

  2. 計數這個結果記錄數(使用counts.count()),而忽略您在上一步中

如果你有興趣在文件顯示總字符數計算的實際值 - 有沒有必要在所有分組 - 你可以每行映射到其長度然後用隱式轉換爲DoubleRDDFunctions調用sum()

logFile.map(_.length).sum() 

阿爾特rnatively可以flatMap到每個字符單獨的記錄,然後使用count

logFile.flatMap(_.toList).count 
+0

謝謝,我現在得到了正確的計數。 – dganesh2002

-1

所有你需要的這裏flatMap +計數

logFile.flatMap(identity).count 
+0

什麼是'身份'在這裏? – dganesh2002

+0

這看起來不像是對問題的回答。 user8061428你會請編輯你的答案,並更具體? –

相關問題