Scala 计算apache spark中每个单词的出现次数
上面的代码段将计算包含单词ERROR的行数。是否有一个类似于“contains”的简化函数,它会返回单词的出现次数Scala 计算apache spark中每个单词的出现次数,scala,apache-spark,Scala,Apache Spark,上面的代码段将计算包含单词ERROR的行数。是否有一个类似于“contains”的简化函数,它会返回单词的出现次数 假设该文件是以Gig为单位的,我希望使用spark clusters对工作进行视差化。只需计算每行的实例数,并将它们相加: val sc = new SparkContext("local[4]", "wc") val lines: RDD[String] = sc.textFile("/tmp/inputs/*") val errors = lines.filter
假设该文件是以Gig为单位的,我希望使用spark clusters对工作进行视差化。只需计算每行的实例数,并将它们相加:
val sc = new SparkContext("local[4]", "wc")
val lines: RDD[String] = sc.textFile("/tmp/inputs/*")
val errors = lines.filter(line => line.contains("ERROR"))
// Count all the errors
println(errors.count())
我认为
map
和filter
应该通过Spark流水线连接在一起,因此如果这些优化能够减少内存消耗,我会感到惊讶。Spark永远不应该最终实现完整的中间行。map(…)
数据集;我认为简单的行.filter(…).count()
应该非常有效。@JoshRosen有趣。谢谢关于内存消耗,我指的是结果RDD的大小,因为RDD[Int]应该是标记器。scala:39:value collect不是Int[error]val errors=lines的成员。flatMap{line=>if(line.contains(“error”))Some(1)else None}.reduce(+2;).collect????但是上面的代码片段显示了一种计算包含错误的行数而不是错误发生次数的方法。@Siva sorry。不需要收集<代码>减少
已经是触发RDD计算的操作。-更正了答案。谢谢。但是你怎么知道单词错误的发生呢?比行数还要多?
val errorCount = lines.map{line => line.split("[\\p{Punct}\\p{Space}]").filter(_ == "ERROR").size}.reduce(_ + _)