如何将文本文件的flatMap转换为flatMap的字符?我必须从文本文件中计算每个字符的出现次数。以下代码后采取什么方法?
{{1}}
答案 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)