当spark上下文正在读取包含100个文件的文件夹时,Spark Accumulator值?

时间:2017-12-26 06:24:02

标签: apache-spark apache-spark-sql accumulator

Spark程序计算初始化为0的累加器值,当程序正在读取包含100个文件的文件夹时,它将增加1?

val myaccumulator = sc.accumulator(0)
val inputRDD= sc.wholeTextFiles("/path/to/100Files")
inputRDD.foreach(f => myaccumulator + f.count)

<console>:29: error: value count is not a member of (String, String)
   inputRDD.foreach(f => myaccumulator + f.count)
                                 ^

1 个答案:

答案 0 :(得分:0)

如果您只想计算文件中的行数,则不需要任何花哨的东西。这样做:

val myaccumulator = sc.accumulator(0)
sc.textFile("path/to/dir/containing/the/files").foreach(_ => myaccumulator += 1)

如果您绝对想要使用累加器,可以这样做:

sc.wholetextFiles("path/to/dir/containing/the/files")
    .map(_._2.split("\\n").size)
    .reduce(_+_)

如果您绝对想要使用wholeTextFile(将每个文件的整个内容放在一个字符串中),则以下任何一个都会计算这些行:

val myaccumulator = sc.accumulator(0)
sc.wholeTextFiles
    .foreach(x => myaccumulator += x._2.split("\\n").size)

或使用累加器

MKCoordinateSpan