如何定义Spark结构化的流式文件接收器文件路径或文件名?

sky*_* CC 2 hdfs apache-spark spark-structured-streaming

我正在使用Spark结构化流处理来自流数据源的数据,并且正在使用文件接收器。数据将在处理后放入hdfs。

我有一个问题,输出文件是这样的part-00012-8d701427-8289-41d7-9b4d-04c5d882664d-c000.txt。这使我无法在上一个小时获取文件输出。

是否可以将输出文件自定义为timestamp_xxx或类似的内容?或者,我可以按批次输出到不同的路径吗?

Sha*_*ica 6

您无法更改已保存文件的名称。但是,您可以更改其保存位置的文件夹结构。用于partitionBy()在数据集中的指定列之后对数据进行分区,在这种情况下,可能需要关注年,月,日和小时:

df.writeStream 
  .format("parquet") // can be "orc", "json", "csv", etc.
  .option("path", "/path/to/save/") 
  .partitionBy("year", "month", "day", "hour") 
  .start() 
Run Code Online (Sandbox Code Playgroud)

这将从以下开始创建一个文件夹结构path,如下所示:

year=2018
|
|--> month=06
|    |
|    |--> day=26
|    |    |
|    |    |--> hour=10
|    |    |--> hour=11
|    |    |--> ...
|    |
|    |--> day=27
|    |    |
|    |    |--> ...
Run Code Online (Sandbox Code Playgroud)

当然,根据可用内容,可以使用其他列对文件进行分区。