当前位置: 首页 > 知识库问答 >
问题:

Spark Streaming Dataframe执行、有状态、分区本地groupBy,避免混乱

白修谨
2023-03-14

在这一点上感觉有点失落。

我有一个基于Spark 2.4.2的流媒体应用程序

  • [DF1]流式预分区数据帧(在Key上),即保证K每次到达同一分区的流
    DF1.join(DF2, "df1.a" === "df2.b", "left")
       .withWatermark("timestamp", "24 hours")
       .groupBy(window('timestamp, "24 hours"), 'theKey)
       .agg(collect_list('payload) as "payload")

问题:洗牌。通过预先对数据集进行分区(在Kafka中),我希望实现分区本地groupBy。不幸的是,这不起作用。

问题是,实现这一目标的正确方法是什么,没有洗牌?有吗?

到目前为止,我一直在探索解决方案:

  1. “窗口上方的agg…”:流媒体中不支持(Spark throws:流媒体数据帧/数据集上不支持非基于时间的窗口)

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

  1. 数据帧上的映射分区,具有自定义状态管理。但是,这使得Spark的有状态流毫无用处。
  2. 以某种方式将原始哈希分区(来自Kafka dataframe)插入Spark,以便它永远处理随机播放(并且不使用默认的200),但我还没有找到明确的来源。

非常感谢您的帮助!

共有1个答案

云丰
2023-03-14

实际上,查找表导致了所有的混乱。我希望Spark更喜欢对较大的数据集进行分区,而不是对较小的查找表进行分区,但事实并非如此。它使用流式数据集,忽略分区,并将它们洗牌到查找表分区所在的位置。

当我按照流式数据帧重新划分查找表时,Spark很高兴。尽管如此,Spark并没有将较大数据集的划分优先于较小数据集的划分,这与直觉背道而驰。

 类似资料:
  • 我正在学习RxJava,但我遇到了避免可变状态的问题。 我正在解决的问题很简单:有一个条目的输入流和一个条目组的输入流。每个项目都属于一个组(有一个组标识符),并且有一些数据。每个组都有一个标识符和一些数据。许多项目可能属于同一组。目标是将这些输入流组合成一个(项、组)对的输出流,以便: 只有当项目及其组都已知时,才会发出(项目,组)对 每次接收更新的项目数据时,必须发出更新的(项目、组)对 当接

  • 本文向大家介绍Shell脚本避免重复执行的方法,包括了Shell脚本避免重复执行的方法的使用技巧和注意事项,需要的朋友参考一下 很多用cron定时执行的shell脚本可能会由于各种原因执行很久,会有必要在运行的时候先检查一下自身是否还在运行。本文提供的linux shell脚本用以检查以命令sh ...来执行的shell脚本。要对其他东西进行唯一性检查,可以稍微修改一下源代码。

  • 我们正在使用dexguard,并且在dexguard项目中还具有以下设置。文本 我还尝试了提供res/值/字符串的变体。类似xml的: 和 等 在小路上。但字符串的键值正在变得模糊。 正在返回0。(其中key是字符串值)。 我也试过了 避免字符串OBF指令的正确方法是什么?

  • 如果Spring集成通道是用任务执行器定义的,那么线程池将用于处理传入的消息。如果service activator或transformerendpoint组件从该内部通道接收消息,是否会实例化一个endpoint组件池,每个线程一个?如果这不是默认行为,那么需要什么配置来实现这一点? 这一点很重要,原因有二: > 以确保endpoint组件在内部通道使用的同一线程中处理消息,因此它们是同一事务的

  • 我已经在Jenkins安装上配置了两个多分支项目(来自GitHub)。目前遗嘱执行人的数量是四个。 有时,当有很多分支要构建时,它最终会出现所有执行器都在等待免费执行器而什么都没有发生的情况。 你通常如何避免这种情况?当然,人们不能在一台机器上配置一百万个执行器来确保这种情况永远不会发生。 我现在有四个执行者试图构建,他们都在等待对方: 另一个问题是,这是如何/为什么可能的?他们没有实施任何机制来

  • 问题内容: 当我通过wkhtmltopdf将html转换为PDF时,我想避免html中的表行内的分页符。我使用page-break-inside:避免使用table- 它的工作原理,但是我有那么多行,那么就行不通了。如果将 tr的 显示设置 为块或其他内容,则它将更改表的格式 并插入双边框。或者可以在拆分表的每个页面上插入表标题。 问题答案: 您可以使用CSS尝试一下: 由于您在上面指出的完全正确