我正在对Spark结构化的流数据帧进行一些转换。我将转换后的数据帧存储为hdfs中的实木复合地板文件。现在,我希望对hdfs的写入应分批进行,而不是先转换整个数据框,然后再存储数据框。
答案 0 :(得分:0)
这是一个镶木地板接收器示例:
# parquet sink example
targetParquetHDFS = sourceTopicKAFKA
.writeStream
.format("parquet") # can be "orc", "json", "csv", etc.
.outputMode("append") # can only be "append"
.option("path", "path/to/destination/dir")
.partitionBy("col") # if you need to partition
.trigger(processingTime="...") # "mini-batch" frequency when data is outputed to sink
.option("checkpointLocation", "path/to/checkpoint/dir") # write-ahead logs for recovery purposes
.start()
targetParquetHDFS.awaitTermination()
更多详细信息:
Kafka集成:https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html
SS编程指南:https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#output-sinks
好吧……我在回复中添加了一些内容,以澄清您的问题。
SS有一些不同的 触发器类型 :
https://spark.apache.org/docs/latest/structured-streaming-programming-guide.html#triggers
默认:下一个触发器在上一个触发器完成处理后发生
固定间隔:
.trigger(processingTime='10 seconds')
因此10秒触发将在00:10、00:20、00:30触发
一次:一次.trigger(once=True)
连续/固定检查点间隔 =>最好查看编程指南文档
因此,在您的Kafka示例中,SS可以通过“ 默认”或“ 固定间隔”触发器或一个微批处理事件时间时间戳上的数据Kafka源主题中所有可用数据的“ 一次性”处理。