Spark结构化流-对旧数据的窗口操作

时间:2019-02-02 10:46:57

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

我是Spark Streaming的新手。从2018年10月到12月,我收集了大约GB的推文。

我编写了一个程序,该程序从目录中读取这些文件并将它们写入Kafka流。

现在,我正在编写另一个Kafka消费者程序以从该流中读取。我还想在该流数据帧上应用窗口功能(60分钟的窗口持续时间和30分​​钟的滑动时间)。

对于小窗户(滑动30分钟1分钟),我得到输出。但是对于我想要的窗口,批次是空的。

我的问题是,我要处理的数据是否旧有关系吗?如果可以,我是否需要进行任何特殊配置才能使其正常工作?另外,我想知道配置 withWatermark 以便处理最新数据的最佳方法。

到目前为止,这是我的卡夫卡消费者:

df = spark.readStream.format("kafka").option(
    "kafka.bootstrap.servers", broker).option("failOnDataLoss","false").option("subscribe", topic).load()

df = df.select(from_json(F.col("value").cast(
    "string"), twitter_schema).alias("tweet"))

df = df.withColumn("timestamp_ms", (F.col("tweet.timestamp_ms")/1000).cast(LongType()).cast(TimestampType()))

w = F.window("timestamp_ms", "60 minute", "15 minute").alias("window")
df = df.withWatermark("timestamp_ms", "60 minute").groupBy(w).count()

df = df.writeStream.format("console").start()

df.awaitTermination()

0 个答案:

没有答案