Spark Streaming Dataframe perform,有状态,分区 localgroupBy,避免混乱


0

感觉有点失落。

我有一个基于Spark 2.4.2和Kafka的流应用程序,它将聚合(时间窗口)流写回Kafka:

    [DF1]流式预分区 DataFrame (在 key上),即。
    DF1.join(DF2, "df1.a" === "df2.b", "left")
       .withWatermark("timestamp", "24 hours")
       .groupBy(window('timestamp, "24 hours"), 'theKey)
       .agg(collect_list('payload) as "payload")

问题:

问题是,没有 shuffle,正确的方法是什么?有吗?

到目前为止我已经探索过的解决方案:

    “agg over window…”:流媒体不支持(Spark抛出:

我正在考虑的解决方案(不情愿地):

    DataFrame 上的 map分区,具有自定义状态管理。然而,这使得Spark

非常感谢您的帮助!

1 答案


0

实际上,查找表导致了所有的混乱。我希望Spark更喜欢对较大的 DataSet 进行分区,而不是对较小的查找表进行分区,但事实并非如此。它接受了流 DataSet ,忽略了分区,并在查找表分区所在的位置对它们进行了 shuffle。

当我按照Streaming dataframe repartition查找表时,Spark很高兴。尽管如此,Spark并没有将大 DataSet 的划分优先于小 DataSet 的划分,这是违反直觉的。


我来回答

写文章

提问题

面试题