以下是我从网络日志文件创建的流数据框架:
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;
答案 0 :(得分:1)
这里确实有两个聚合。第一个是明确的:
.groupBy(...).agg(...)
第二个是必需的
.dropDuplicates()
已实现
.groupBy(...).agg(first(...), ...)
您将不得不重新设计管道。