使用Spark / scala计算文件中的所有字符?

时间:2017-05-24 18:30:09

标签: scala apache-spark

如何使用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

我在这里得到错误的数字。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

你在这里做的是:

  1. 计算每个唯一字符在输入中出现的次数:

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

    然后:

  2. 在此结果中计算记录的数量(使用counts.count()),忽略您在上一步中计算的实际
  3. 如果您对显示文件中的总字符数感兴趣 - 根本不需要分组 - 您可以将每一行映射到长度,然后使用隐式转换为DoubleRDDFunctions以调用sum()

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

    或者,您可以flatMap为每个字符单独记录,然后使用count

    logFile.flatMap(_.toList).count
    

答案 1 :(得分:-2)

这里你需要的只是flatMap + count

logFile.flatMap(identity).count