我正在dataproc GCP上运行spark 2.4.2,并将状态聚合应用于具有1天水印的流IOT数据,如下所示:
csvDF = sqlcontext \
.readStream \
.option("sep", ",") \
.option("checkpointLocation", "gs://bucket_name/checkpoint") \
.schema(schema) \
.csv(bucket_path)
df_aggregated = csvDF \
.withWatermark("date_time","1 day") \
.groupBy(
csvDF.unique_device_id) \
.agg(
sum(col('overall_measure1')),
sum(col('overall_measure2')),
sum(col('overall_measure3'))
)
def process_row(row):
if row['overall_measure1'] >= 10000 :
#Write a file with a custom message to the gcs bucket
print(row)
pass
query = (
df_aggregated.writeStream \
.foreach(process_row)
.outputMode("complete")
.start()
)
我的目标是获取每一行的总和,并检查是否有任何值(overall_measure1,overall_measure2,overall_measure3)超出某个值,比如说10000。如果是的话,我希望能够编写一些自定义消息发送到我的GCS存储桶。我已经尝试了以下方法,但是在任何地方都没有足够的文档,所以如果有人可以让我知道如何解决这个问题,我将不胜感激。
面临的问题-我无法使用foreach接收器捕获值,我的问题不是关于如何将自定义文件写入gcs存储桶。