Apache spark Spark中的流数据集查询
我有一个流式数据集,包含以下列:bag\u id、ball\u color。我想为每个包找到最流行的颜色。所以,我试着:Apache spark Spark中的流数据集查询,apache-spark,pyspark,apache-spark-sql,dataset,spark-structured-streaming,Apache Spark,Pyspark,Apache Spark Sql,Dataset,Spark Structured Streaming,我有一个流式数据集,包含以下列:bag\u id、ball\u color。我想为每个包找到最流行的颜色。所以,我试着: dataset.groupBy("bag_id", "color") # 1st aggregation .agg(count("color").as("color_count")) .groupBy("bag_id") # 2nd aggregation .agg(max("color_count")) 但我有一个错误: 线程“m
dataset.groupBy("bag_id", "color") # 1st aggregation
.agg(count("color").as("color_count"))
.groupBy("bag_id") # 2nd aggregation
.agg(max("color_count"))
但我有一个错误:
线程“main”org.apache.spark.sql.AnalysisException中的异常:
流媒体不支持多个流媒体聚合
数据帧/数据集
我可以只使用一个聚合函数创建正确的查询吗?有一个开放的Jira解决这个问题,目前我们无法对流数据运行多个聚合 一种解决方法是执行一次聚合,并保存回Kafka..等,然后再次读取Kafka以执行另一次聚合
(或)
我们只能在流数据上运行一个聚合,并将其保存到HDFS/Hive/HBase和fetch以执行其他聚合(这将是单独的工作)有一个开放的Jira解决此问题,目前我们无法在流数据上运行多个聚合 一种解决方法是执行一次聚合,并保存回Kafka..等,然后再次读取Kafka以执行另一次聚合
(或)
我们只能在流数据上运行一个聚合,并将其保存到HDFS/Hive/HBase和fetch以执行其他聚合(这将是单独的工作)是的,Spark 2.4.4(目前最新版本)中尚不支持多个流聚合。但是,作为一种解决方法,您可以使用.foreachBatch()
:
在.foreachBatch()
中,df不是流式df,因此您可以随心所欲。是的,Spark 2.4.4(目前最新版本)中尚不支持多个流式聚合。但是,作为一种解决方法,您可以使用.foreachBatch()
:
在
.foreachBatch()
中,df不是流式df,因此您可以做任何您想做的事情。您尝试过我的建议吗?@ggeop谢谢您的帮助。我只用一个聚合函数sumperfect解决了我的问题,好消息:-)我也有同样的问题,但我没有使用一个聚合的灵活性,所以我使用了foreachBatch()
方法。你试过我的建议吗?@ggeop谢谢你的帮助。我用sumperfect函数解决了我的问题,好消息:-)我也有同样的问题,但我没有使用一个聚合的灵活性,所以我使用了foreachBatch()
方法。
def foreach_batch_function(df, epoch_id):
df.groupBy("bag_id","color")
.agg(count("color").as("color_count"))
.groupBy("bag_id").agg(max("color_count"))
.show() # .show() is a dummy action
streamingDF.writeStream.foreachBatch(foreach_batch_function).start()