org.apache.spark.sql.AnalysisException:流数据帧/数据集不支持多个流聚合;

时间:2018-07-08 10:48:59

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

以下是我从网络日志文件创建的流数据框架:

 val finalDf = joinedDf
    .groupBy(window($"dateTime", "10 seconds"))
    .agg(
      max(col("datetime")).as("visitdate"),
      count(col("ipaddress")).as("number_of_records"),
      collect_list("ipaddress").as("ipaddress")
    )
    .select(col("window"),col("visitdate"),col("number_of_records"),explode(col("ipaddress")).as("ipaddress"))
    .join(joinedDf,Seq("ipaddress"))
    .select(
      col("window"),
      col("category").as("category_page_category"),
      col("category"),
      col("calculation1"),
      hour(col("dateTime")).as("hour_label").cast("String"),
      col("dateTime").as("date_label").cast("String"),
      minute(col("dateTime")).as("minute_label").cast("String"),
      col("demography"),
      col("fullname").as("full_name"),
      col("ipaddress"),
      col("number_of_records"),
      col("endpoint").as("pageurl"),
      col("pageurl").as("page_url"),
      col("username"),
      col("visitdate"),
      col("productname").as("product_name")
    ).dropDuplicates().toDF()

在此阶段的早些时候,没有对此数据帧执行任何聚合。 我只应用了一次聚合,但是仍然出现错误:

  

线程“ main” org.apache.spark.sql.AnalysisException中的异常:   流不支持多个流聚合   DataFrames / Datasets;

1 个答案:

答案 0 :(得分:1)

这里确实有两个聚合。第一个是明确的:

.groupBy(...).agg(...)

第二个是必需的

.dropDuplicates()

已实现

.groupBy(...).agg(first(...), ...)

您将不得不重新设计管道。