我们如何在foreachRDD块中进行微量分析操作。例如,我从HDFS读取日志并在foreachRDD中执行操作
val lines = ssc.textFileStream(hadoopPath)
lines.foreachRDD{ rdd =>
val newRDD = rdd.map(line =>
ScalaObject.process(line)
}
代码将为日志中的每一行调用ScalaObject.process
。是否可以为一批行调用ScalaObject.process
?
由于
答案 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]
。