如何从检查点数据重新启动pyspark流查询?

时间:2018-12-07 12:53:18

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

我正在使用pyspark 2.2.0创建一个Spark Streaming应用程序

我能够创建流式查询

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode
from pyspark.sql.functions import split

spark = SparkSession \
      .builder \
      .appName("StreamingApp") \
      .getOrCreate()

staticDataFrame = spark.read.format("parquet")\
.option("inferSchema","true").load("processed/Nov18/")

staticSchema = staticDataFrame.schema
streamingDataFrame = spark.readStream\
.schema(staticSchema)\
.option("maxFilesPerTrigger",1)\
.format("parquet")\
.load("processed/Nov18/")

daily_trs=streamingDataFrame.select("shift","date","time")
.groupBy("date","shift")\
.count("shift")

writer = df.writeStream\
   .format("parquet")\
   .option("path","data")\
   .option("checkpointLocation","data/checkpoints")\
   .queryName("streamingData")\
   .outputMode("append")

query = writer.start()
query.awaitTermination()

查询正在流式传输,并且“ processed / Nov18”的所有其他文件都将被处理并存储到“ data /”

如果流式传输失败,我想重新启动相同的查询

解决方案的路径

  1. 根据官方文档,我可以获得一个可用于重新启动查询的ID https://spark.apache.org/docs/2.2.0/api/python/pyspark.sql.html?highlight=streamingquery#pyspark.sql.streaming.StreamingQuery.id

  2. pyspark.streaming模块包含具有类方法的StreamingContext类

    classmethod getActiveOrCreate(checkpointPath,setupFunc) https://spark.apache.org/docs/latest/api/python/pyspark.streaming.html#pyspark.streaming.StreamingContext.getOrCreate

可以以某种方式使用这些方法吗?

是否有人可以使用生产就绪的流媒体应用程序作为参考?

1 个答案:

答案 0 :(得分:1)

您应该简单地(重新)启动具有可用检查点目录的pyspark应用程序,其余的工作由Spark Structured Streaming完成。无需更改。

  

是否有人可以使用生产就绪的流媒体应用程序作为参考?

我会问Spark users mailing list

相关问题