如何定义 spark 结构化流文件接收器文件路径或文件名?
How to define a spark structured streaming file sink file path or file name?
我正在使用 spark 结构化流式处理来处理来自流式数据源的数据,并且我正在使用文件接收器。数据处理后放入hdfs
我遇到了输出文件类似于 part-00012-8d701427-8289-41d7-9b4d-04c5d882664d-c000.txt
的问题。这让我无法在最后一小时内获得文件输出。
是否可以将输出文件自定义为 timestamp_xxx 或类似的格式?或者,我可以分批输出到不同的路径吗?
我相信这种文件格式是 Spark 用于存储每个分区的值的内部格式。如果您正在使用某种 blob 存储(对不起,我是 windows 用户),您仍然应该能够从输出位置加载文件,然后使用 DataFrame 再次处理它们。
我想说的是,尽管您在文件名中没有太多发言权,因为这是 Spark 自己做的事情,它不应该阻止您创建自己的工作流,在您希望看到的地方批处理东西在文件中放置一些时间戳(我假设输出文件内容有某种 DataTime 列,如果没有,添加一个可能是个好主意)
这就是我处理事情的方式,将时间戳作为文件内容的一部分,然后您可以使用实际文件内容(正如我所说的读入 DataFrame 所说),然后只需使用正常的 DataFrame / Map 操作在加载的输出数据上
我大概说一下这个here。
您不能更改已保存文件的名称。但是,您可以更改保存位置的文件夹结构。使用 partitionBy()
在数据集中的指定列之后对数据进行分区,在这种情况下,年、月、日和小时可能很重要:
df.writeStream
.format("parquet") // can be "orc", "json", "csv", etc.
.option("path", "/path/to/save/")
.partitionBy("year", "month", "day", "hour")
.start()
这将创建一个从 path
开始的文件夹结构,如下所示:
year=2018
|
|--> month=06
| |
| |--> day=26
| | |
| | |--> hour=10
| | |--> hour=11
| | |--> ...
| |
| |--> day=27
| | |
| | |--> ...
当然,根据可用的内容,可以使用其他列对文件进行分区。
我正在使用 spark 结构化流式处理来处理来自流式数据源的数据,并且我正在使用文件接收器。数据处理后放入hdfs
我遇到了输出文件类似于 part-00012-8d701427-8289-41d7-9b4d-04c5d882664d-c000.txt
的问题。这让我无法在最后一小时内获得文件输出。
是否可以将输出文件自定义为 timestamp_xxx 或类似的格式?或者,我可以分批输出到不同的路径吗?
我相信这种文件格式是 Spark 用于存储每个分区的值的内部格式。如果您正在使用某种 blob 存储(对不起,我是 windows 用户),您仍然应该能够从输出位置加载文件,然后使用 DataFrame 再次处理它们。
我想说的是,尽管您在文件名中没有太多发言权,因为这是 Spark 自己做的事情,它不应该阻止您创建自己的工作流,在您希望看到的地方批处理东西在文件中放置一些时间戳(我假设输出文件内容有某种 DataTime 列,如果没有,添加一个可能是个好主意)
这就是我处理事情的方式,将时间戳作为文件内容的一部分,然后您可以使用实际文件内容(正如我所说的读入 DataFrame 所说),然后只需使用正常的 DataFrame / Map 操作在加载的输出数据上
我大概说一下这个here。
您不能更改已保存文件的名称。但是,您可以更改保存位置的文件夹结构。使用 partitionBy()
在数据集中的指定列之后对数据进行分区,在这种情况下,年、月、日和小时可能很重要:
df.writeStream
.format("parquet") // can be "orc", "json", "csv", etc.
.option("path", "/path/to/save/")
.partitionBy("year", "month", "day", "hour")
.start()
这将创建一个从 path
开始的文件夹结构,如下所示:
year=2018
|
|--> month=06
| |
| |--> day=26
| | |
| | |--> hour=10
| | |--> hour=11
| | |--> ...
| |
| |--> day=27
| | |
| | |--> ...
当然,根据可用的内容,可以使用其他列对文件进行分区。