计算输入文本文件中的字符出现次数

时间:2017-02-01 10:42:59

标签: scala apache-spark rdd flatmap bigdata

如何将文本文件的flatMap转换为flatMap的字符?我必须从文本文件中计算每个字符的出现次数。以下代码后采取什么方法?

{{1}}

3 个答案:

答案 0 :(得分:1)

要将每个String转换为代表字符,您需要额外的flatMap

val characters = lines.flatMap(_.split(" ")).flatMap(_.toCharArray)

scala> val lines = Array("hello world", "yay more lines")
lines: Array[String] = Array(hello world, yay more lines)

scala> lines.flatMap(_.split(" ")).flatMap(_.toCharArray)
res3: Array[Char] = Array(h, e, l, l, o, w, o, r, l, d, y, a, y, m, o, r, e, l, i, n, e, s)

虽然这是一个Scala控制台,但它在RDD上的工作方式相同。

答案 1 :(得分:0)

如果您只对char感兴趣,那么我认为您可能也想计算spaces ' '

val chars = readme.flatMap(line => line.toCharArray)

// but if you dont want to count spaces too,
// val chars = readme.flatMap(line => line.toCharArray.filter(_ != ' '))

val charsCount = chars
  .map(c => (c, 1))
  .reduceByKey((i1: Int, i2: Int) => i1 + i2)

答案 2 :(得分:0)

val txt = a.getClass.getResourceAsStream("/a.txt")
val txtFile = File.createTempFile("a", "txt")
txtFile.deleteOnExit()
ByteStreams.copy(txt, Files.newOutputStreamSupplier(txtFile))
val tokenized = sc.textFile(txtFile.toString).flatMap(_.split(' ')) 
val char = tokenized.flatMap(_.toCharArray)