Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark Pypark结构化流式写入,分批写入拼花地板_Pyspark_Spark Streaming_Spark Structured Streaming_Spark Streaming Kafka - Fatal编程技术网

Pyspark Pypark结构化流式写入,分批写入拼花地板

Pyspark Pypark结构化流式写入,分批写入拼花地板,pyspark,spark-streaming,spark-structured-streaming,spark-streaming-kafka,Pyspark,Spark Streaming,Spark Structured Streaming,Spark Streaming Kafka,我正在spark结构化流数据帧上进行一些转换。我将转换后的数据帧存储为hdfs中的拼花文件。现在我希望对hdfs的写入应该成批进行,而不是先转换整个数据帧,然后存储数据帧 下面是一个拼花地板水槽示例: # parquet sink example targetParquetHDFS = sourceTopicKAFKA .writeStream .format("parquet") # can be "orc", "json", "csv", etc. .outputMo

我正在spark结构化流数据帧上进行一些转换。我将转换后的数据帧存储为hdfs中的拼花文件。现在我希望对hdfs的写入应该成批进行,而不是先转换整个数据帧,然后存储数据帧

下面是一个拼花地板水槽示例:

# 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()
有关更具体的详细信息:

卡夫卡一体化:

SS节目指南:

补充 好的。。。我在回答中添加了一些东西来澄清你的问题

SS有几种不同的触发器类型

默认:一旦上一个触发器完成处理,就会发生下一个触发器

固定时间间隔:
.trigger(processingTime='10秒')
因此10秒的触发器将在00:10、00:20、00:30触发

一次性:一次处理所有可用数据
。触发器(once=True)

连续/固定检查点间隔=>最好看编程指南文档


因此,在您的卡夫卡示例中,SS可以通过“默认值”或“固定间隔”触发器或“一次性”处理卡夫卡源主题中的所有可用数据,以微批量方式处理事件时间戳上的数据。

您能澄清一下吗。。。hdfs中的持久拼花文件是从结构化流作业还是常规spark作业输出的?或者您正在尝试使用结构化流媒体以小批量写入hdfs中的拼花地板?我正在尝试从结构化流媒体将小批量中的拼花地板文件写入hdfs。我的结构化流的来源是卡夫卡。谢谢你的澄清。我已经提供了一些解决方案供您开始。谢谢您的回答。我试图了解触发器是如何创建微批次的。假设我有20000条来自卡夫卡的信息流。是将所有消息作为单个微批同时进行转换,还是将这些消息在时间间隔内转换为小微批,然后逐个处理。@Y0geshGupta不客气。。。我在回复中添加了更多关于您的问题的信息。感谢您提供的详细信息,让问题变得更加清楚。我仍然不确定,如果我使用processingTime触发,它是否会将数据集中的拼花文件以小批量存储(以小批量转换,然后存储),或者它是否会在dataframe中的完整20k记录上进行转换,并将其存储为拼花,将其作为单个微批次处理。我将20k作为记录数,因为这是来自我的卡夫卡主题的消息的初始计数。如果您执行processingTime,它会根据源数据时间戳中的事件时间,在每个“触发器”间隔频率中附加新数据(作为拼花文件)。。。我对卡夫卡体系结构不是很有经验,但我假设您的数据是“流式”的,并将观察的事件时间作为时间戳进行跟踪。