如何在scala中使用fileStream()查找Spark Streaming中的文件名?
我到处寻找如何找到Spark Streaming在fileStream()方法中拾取的每个文件的名称。Java中有一些局部解决方案,但我找不到Scala示例。也有使用FileInputFormat的不完整建议,但不清楚如何使用。任何Scala示例代码都将不胜感激。这就是我如何通过查找和组合一些类似问题的答案来解决此问题的方法:如何在scala中使用fileStream()查找Spark Streaming中的文件名?,scala,filenames,filestream,spark-streaming,Scala,Filenames,Filestream,Spark Streaming,我到处寻找如何找到Spark Streaming在fileStream()方法中拾取的每个文件的名称。Java中有一些局部解决方案,但我找不到Scala示例。也有使用FileInputFormat的不完整建议,但不清楚如何使用。任何Scala示例代码都将不胜感激。这就是我如何通过查找和组合一些类似问题的答案来解决此问题的方法: def fileNameFilter(path: Path): Boolean = { if (path.getName().contains("COPYING"
def fileNameFilter(path: Path): Boolean = {
if (path.getName().contains("COPYING")) {
logger.info("*** ignoring incomplete file: " + path.getName())
return false
} else {
return true
}
}
def deleteFile(sc: SparkContext, fileName: String): Unit = {
val filePath = new Path(fileName)
val fs = FileSystem.get(new Configuration())
if (fs.isDirectory(filePath)) {
fs.listStatus(filePath).foreach((status) => {
fs.delete(status.getPath(), true)
})
} else {
fs.delete(filePath, true)
}
}
val ssc = new StreamingContext(sc, Seconds(5))
val mfStream = ssc.fileStream[LongWritable,Text,TextInputFormat](pathToMyFiles, x=>fileNameFilter(x), true)
mfStream.foreachRDD(rdd => {
....some business logic
if (!rdd.partitions.isEmpty) {
regExp.findAllMatchIn(rdd.toDebugString).foreach(name => {
logger.info("Deleting processed File(s): " + name.toString)
deleteFile(sc, name.toString)
})
}
})
希望这能帮助其他有类似需求的人