Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark中的流数据集查询_Apache Spark_Pyspark_Apache Spark Sql_Dataset_Spark Structured Streaming - Fatal编程技术网

Apache spark Spark中的流数据集查询

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

我有一个流式数据集,包含以下列: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"))
但我有一个错误:

线程“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()