Spark 连接速度呈指数级缓慢

2024-02-20

我正在尝试连接两个 Spark RDD。我有一个链接到类别的事务日志。我已将交易 RDD 格式化为以类别 id 作为键。

transactions_cat.take(3)
[(u'707', [u'86246', u'205', u'7', u'707', u'1078778070', u'12564', u'2012-03-02 00:00:00', u'12', u'OZ', u'1', u'7.59']), 
(u'6319', [u'86246', u'205', u'63', u'6319', u'107654575', u'17876', u'2012-03-02 00:00:00', u'64', u'OZ', u'1', u'1.59']), 
(u'9753', [u'86246', u'205', u'97', u'9753', u'1022027929', u'0', u'2012-03-02 00:00:00', u'1', u'CT', u'1', u'5.99'])]

categories.take(3)
[(u'2202', 0), (u'3203', 0), (u'1726', 0)]

事务日志约为 20 GB(3.5 亿行)。 类别列表小于1KB。

当我跑步时

transactions_cat.join(categories).count()

Spark 开始变得非常慢。我有一个有 643 个任务的阶段。前 10 个任务大约需要 1 分钟。然后每个任务的速度越来越慢(第 60 个任务大约需要 15 分钟)。我不确定出了什么问题。

Please check theses screenshots to get a better idea. enter image description here enter image description here enter image description here

我正在使用 python shell 运行 Spark 1.1.0,有 4 个工作线程,总内存为 50 GB。 仅统计 RDD 的交易相当快(30 分钟)


问题可能在于 Spark 没有注意到您有一个简单的连接问题。当两者之一RDD你加入的公司太小了,所以最好不要成为一个RDD。然后你可以推出你自己的实现散列连接 http://en.wikipedia.org/wiki/Hash_join,这实际上比听起来简单得多。基本上,您需要:

  • 将您的类别列表从RDD using collect()——由此产生的沟通将很容易收回成本(或者,如果可能的话,不要让它成为一个RDD首先)
  • 将其转换为一个哈希表,其中一个条目包含一个键的所有值(假设您的键不是唯一的)
  • 对于您的大号中的每一对RDD,在哈希表中查找键并为列表中的每个值生成一对(如果未找到,则该特定对不会生成任何结果)

我有一个Scala 中的实现 https://github.com/spirom/LearningSpark/blob/master/src/main/scala/special/HashJoin.scala——随意询问有关翻译的问题,但这应该很容易。

另一个有趣的可能性是尝试使用星火SQL https://spark.apache.org/sql/。我很确定该项目的长期目标将包括自动为您执行此操作,但我不知道他们是否已经实现了这一目标。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 连接速度呈指数级缓慢 的相关文章

随机推荐

  • Delphi XE2 / Indy TIdTCPServer /“连接由对等方重置”

    我在 Delphi XE2 中使用 Indy 使用 TIdTCPServer 发送 TCP 消息时遇到一个问题 举个例子 我有 2 台设备 我将与设备 1 进行通信 当我向设备 1 发送消息时 消息发送正常 但在不关闭程序的情况下 当我向设
  • SQlite:如何找到互斥对?

    这里有张桌子Likes有字段ID1 ID2其中包含互斥对 例如 1689 1709 and 1709 1689 我想找到他们 我尝试了串联 但没有成功 select L ID1 L ID2 from Likes L where L ID1
  • Windows 10 可以从应用商店下载 Windows 8.0 应用程序吗?

    我的 Windows 开发中心仪表板中有 Windows 8 0 软件包 我想知道 Windows 10 用户是否可以通过某种方式从 Windows 应用商店查看并下载我的应用程序 看来它不起作用 怎么做 我是否必须将我的项目 重新定位 到
  • UIWebView动态内容大小

    我环顾四周 没有看到任何快速相关的方法来做到这一点 我试图让我的 UIWebViews 高度是动态的 我有一个使用 loadHtmlString 函数加载数据的 UIWebView 问题是我从 sqlite 数据库加载数据 每次加载不同长度
  • JSF 2 复合:actionSource 在 ui 中公开命令按钮:repeat

    在我的复合组件中 我有一个 ui repeat 其中除其他静态内容外 还有一个命令按钮 如下所示
  • 全文搜索引擎比较——Lucene、Sphinx、Postgresql、MySQL? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在构建一个 Django 网站 并且正在寻找一个搜索引擎 几位候选人 Lucene Lucene
  • 如何删除 SQLite 中的所有空表?

    我想删除所有没有行的表 如何删除 SQLite 中的所有空表 EDIT我需要在手机上执行此操作 没有外壳 在 Windows Mobile 手机上 执行命令时 无论表中是否有数据 都可以删除表 不知道任何数据库以其他方式运行 所以这意味着
  • 如何修复 pip 安装错误:“环境错误:[Errno 42] 非法字节序列”?

    我正在尝试下载kivy模块使用pip 当我运行pip install command 我得到一个错误 Could not install packages due to an EnvironmentError Errno 42 Illega
  • 我获取的资源不在项目的构建路径上[重复]

    这个问题在这里已经有答案了 当我尝试 组织导入 或尝试访问任何类属性时 我得到了资源不在项目的构建路径上 我正在使用 ant 构建我的项目 我尝试在 javabuilpath gt 项目中配置我的构建路径 但它没有向我显示我的 src 文件
  • 如何跳转到 RichTextBox 中的特定行?

    我正在寻找如何跳转到特定行的示例代码RichTextBox in WPF 我不知道如何做到这一点 在 winForms 中它非常简单 因为我可以自由设置 SelectionStart 和 Selection Length 这与 WPF 中不
  • 当[:punct:]太多时[重复]

    这个问题在这里已经有答案了 我正在清理 R 中的文本字符串 我想删除所有标点符号except撇号和连字符 这意味着我无法使用 punct 字符类 除非有一种说法 punct but not lt gt 并且反引号必须出来 对于上述大多数情况
  • 在 Visual Studio 2010 C/C++ 中,“重新扫描解决方案”操作有何作用?

    我正在尝试编译第三方项目 但遇到一些链接问题 我在解决小问题时没有遇到太大麻烦 但我注意到它们是项目或解决方案的上下文菜单中的 重新扫描解决方案 选项 我点击了它 但它似乎没有做任何事情 它到底有什么作用 此命令更新项目浏览数据库中的过时文
  • 如何使用 sed 只删除三个空行?

    如何使用 sed 只删除三个空行 例如 我的文本 txt line1 line2 line3 line4 使用 sed 我希望结果看起来像这样 我的文本 txt line1 line2 line3 line4 我能够删除双空行 sed i
  • Azure SignalR 服务连接未处于活动状态

    我从 2 4 0 更新了我们的信号包并添加了RunAzureSignalR代替RunSignalR 在 de 中添加了此代码Startup cs app Map signalr map gt var hubConfiguration new
  • LISP - 如何获得嵌套列表的平均长度?

    我有个问题 我需要从此列表中获取平均长度 1 2 3 4 5 6 7 8 9 应该是2 我不知道从哪里开始 我试图得到 1 2 3 4 5 6 7 8 9 from 1 2 3 4 5 6 7 8 9 但我失败了 因为 reduce app
  • Google 是否提供可用于获取手机位置的 API?

    我的智能手机向 Google G 和 Android 设备管理器 报告我的位置 我想从网站 程序中读取该位置来绘制我的位置 我可以使用智能手机上的另一个应用程序进行额外的跟踪 但这往往会消耗相当多的电池 有两个应用程序进行跟踪 由于纬度已被
  • 由于 Windows 之前冻结,Outlook 宏被禁用

    我们公司在每台安装 Outlook 的计算机上都使用 VBA 宏 宏使用证书进行数字签名以确保安全 该证书是通过以下方式生成的自认证程序应用 当我们在 Outlook 中的 VBA 项目 包含宏 上添加数字签名时 我们选择之前生成的证书 并
  • 确定 CALayer 旋转了多少

    我有一个程序 其中 CALayer 必须旋转到特定值 如何确定 CALayer 的当前旋转 我有一个旋转图层的 UIRotationGestureRecognizer void handleGesture UIGestureRecogniz
  • 移动Android View并防止onDraw被一遍又一遍地调用

    我正在延长View 类 我所说的MyView 我添加了一些属性 这些属性基本上说明了在对象上绘制的内容 并处理它 我每隔几毫秒移动一次此类的对象 这效果很好 我在用着this layout left top right bottom 移动
  • Spark 连接速度呈指数级缓慢

    我正在尝试连接两个 Spark RDD 我有一个链接到类别的事务日志 我已将交易 RDD 格式化为以类别 id 作为键 transactions cat take 3 u 707 u 86246 u 205 u 7 u 707 u 1078