我正在Dataproc上运行一个Spark Streaming应用程序。我正在将基本分组和计数聚合应用于原始数据帧,如下所示:
df_windowed_counts = df_visits \
.withWatermark("date_time", "10 minutes") \
.groupBy(
window(df_visits.date_time, "10 minutes", "5 minutes"),
df_visits.date_time,
df_visits.exact_time,
df_visits.state,
df_visits.type,
df_visits.sub_cat) \
.count()
query = df_windowed_counts.writeStream \
.trigger(processingTime="15 seconds") \
.outputMode("complete") \
.format("console") \
.start()
query.awaitTermination()
以上内容在打印到控制台时似乎工作正常,但我希望将此数据帧(df_windowed_counts)保存到我的gcs存储桶中。所以我做了下面的事情,遇到了一个错误:
query = df_windowed_counts.writeStream \
.format("parquet") \
.option("checkpointLocation","gs://bucket_name/spark-agg-checkpoints") \
.option("path","gs://bucket_name/aggregated_streaming_data") \
.option("failOnDataLoss","false") \
.start()
**
有流式聚合时不支持追加输出模式 在不带水印的流数据框架/数据集上
我在遇到上述错误后甚至尝试了以下方法:
def foreach_batch_function(df,epoch_id) :
df.writeStream \
.format("parquet") \
.option("checkpointLocation","gs://bucket_name/spark-agg-checkpoints") \
.option("path","gs://bucket_name/aggregated_streaming_data") \
.option("failOnDataLoss","false") \
.start()
df_windowed_counts.writeStream.outputMode("complete").foreachBatch(foreach_batch_function).start()
似乎没有一个工作。请就什么地方出问题提出建议,因为我没有看到足够的文档,仅是理论上的解释。