从S3 /磁盘上的文件生成火花结构化流-向记录/行添加批处理文件名?

时间:2018-11-26 15:38:04

标签: scala apache-spark spark-structured-streaming

我正在实现一个Spark结构化的流应用程序,该应用程序处理磁盘或S3上的文件夹中的Web服务器日志文件。 Spark结构化流媒体几乎完美地适合了用例,但有一点皱纹。 文件夹中的文件名还包含计算机名称,例如。喜欢:

/ node1 _20181101.json.gz

/ node1 _20181102.json.gz

/ node2 _20181101.json.gz

/ node3 _20181102.json.gz

/ node4 _20181102.json.gz

...等等。

一个简化的版本的源代码看起来像这样(我将下面的内容变成带有窗口等的连续流)

val inputDF = spark.read
  .option("codec", classOf[GzipCodec].getName)
  .option("maxFilesPerTrigger", 1.toString)
  .json(config.directory)
  .transform { ds =>
      logger.info(ds.inputFiles)
      ds
}.foreach(println(_))

我想转换批处理并将节点名从文件名添加到每条记录行,-我似乎看不到任何可以用来丰富功能的 onBatch 触发器具有文件名中的节点ID的记录模式。

我看过以下内容,但似乎不适合: [FileStreamSource] [https://jaceklaskowski.gitbooks.io/spark-structured-streaming/spark-sql-streaming-FileStreamSource.html#metadataLog]

不幸的是,从文件名中获取计算机名称的句柄是稍后进行分析的关键,并且我无法控制日志的填充方式

有任何线索吗?

0 个答案:

没有答案