首页 > 解决方案 > 火花结构化流将聚合数据帧连接到数据帧

问题描述

我有一个流式数据框,它可能看起来像:

+--------------------+--------------------+
|               owner|              fruits|
+--------------------+--------------------+
|Brian                | apple|
Brian                | pear |
Brian                | date|
Brian                | avocado|
Bob                | avocado|
Bob                | apple|
........
+--------------------+--------------------+

我执行了 groupBy, agg collect_list 来清理内容。

val myFarmDF = farmDF.withWatermark("timeStamp", "1 seconds").groupBy("fruits").agg(collect_list(col("fruits")) as "fruitsA")

输出是每个所有者的单行和每个水果的数组。我现在想将这个清理后的数组加入到原始流数据帧中,删除 fruits col 并且只有 fruitsA 列

val joinedDF = farmDF.join(myFarmDF, "owner").drop("fruits")

这似乎在我脑海中起作用,但火花似乎并不同意。

我得到一个

Failure when resolving conflicting references in Join:
'Join Inner
...
+- AnalysisBarrier
      +- Aggregate [name#17], [name#17, collect_list(fruits#61, 0, 0) AS fruitA#142]

当我把所有东西都变成一个静态数据框时,它工作得很好。这在流媒体环境中是不可能的吗?

标签: scalaapache-sparkspark-structured-streaming

解决方案


您是否尝试过重命名列名?有一个类似的问题https://issues.apache.org/jira/browse/SPARK-19860


推荐阅读