Pyspark-结构化流,将聚合Df保存到hdfs

时间:2019-05-25 14:00:11

标签: python apache-spark spark-structured-streaming

我正在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()

似乎没有一个工作。请就什么地方出问题提出建议,因为我没有看到足够的文档,仅是理论上的解释。

0 个答案:

没有答案