在foreachRDD块火花流中的微量分析操作

时间:2016-03-16 13:29:44

标签: apache-spark spark-streaming

我们如何在foreachRDD块中进行微量分析操作。例如,我从HDFS读取日志并在foreachRDD中执行操作

val lines = ssc.textFileStream(hadoopPath)
lines.foreachRDD{ rdd =>
   val newRDD = rdd.map(line =>
   ScalaObject.process(line)  
}

代码将为日志中的每一行调用ScalaObject.process。是否可以为一批行调用ScalaObject.process

由于

1 个答案:

答案 0 :(得分:0)

在您的示例中,您要求做的事情不会使用Spark的并行性。如果由于某种原因确实需要执行此操作,则每个分区只能运行一次处理。你得到的并行性只有N,其中N是分区数。

使用rdd.foreachPartition

val lines = ssc.textFileStream(hadoopPath)
  lines.foreachRDD { rdd =>
  val newRDD = rdd.foreachPartition(lines =>
    ScalaObject.process(lines)
  )
}

参数lines的类型为Iterable[String]