我是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()