我正在使用textFileStream将数据导入Spark Streaming。但是数据仅针对一批进行处理。我的第一个问题是它不会从文件中流式传输每条记录吗?
根据https://docs.databricks.com/spark/latest/rdd-streaming/debugging-streaming-applications.html For TextFileStream, since files are input, the # of input events is always 0. In such cases, you can look at the “Completed Batches” section in the notebook to figure out how to find more information.
其次,我想知道Spark Engine正在处理多少条记录。例如,如果我流式传输1GB的文件,包含100K数据记录,我想知道Spark Streaming执行它的程度。< / p>
任何人都可以分享他们的想法或一些有用的链接。任何帮助将不胜感激。
感谢。
Spark版本:2.0.1 通过textFileStream从Amazon s3获取数据
答案 0 :(得分:0)
没有直接的方法可以看到这一点,但您可以使用自定义代码实现此目的。
例如,当您处理textFileStream生成的dStream时,使用
dStream.forEachRDD{rdd => rdd.forEachPartition{part => { }} }
所以你可以简单地在rdd.forEachPartition {}块中添加一些代码,它将更新在任何累加器中处理的记录,或者在Kafka主题中添加该信息,或者在zookeeper中添加该信息,甚至更新mysql数据库:)< / p>
dStream.forEachRDD{rdd => rdd.forEachPartition{part => {
var recordProcessed:Int = 0; ...
part.foreach{...;recordProcessed+=1}
//update recordProcessed in kafka/HBase/Mysql/Zookepeer
}} }
可以进一步使用可视化工具来显示没有记录过程。