无法压缩分区数量不等的 RDD

2024-04-04

现在我有3个这样的RDD:

rdd1:

1 2
3 4
5 6
7 8
9 10

rdd2:

11 12
13 14

rdd3:

15 16
17 18
19 20

我想这样做:

rdd1.zip(rdd2.union(rdd3))

我想要的结果是这样的:

1 2 11 12
3 4 13 14
5 6 15 16
7 8 17 18
9 10 19 20

但我有一个例外是这样的:

线程“main”中的异常 java.lang.IllegalArgumentException:无法压缩分区数量不等的 RDD

有人告诉我我可以毫无例外地做到这一点:

rdd1.zip(rdd2.union(rdd3).repartition(1))

不过好像是有点成本。所以我想知道是否还有其他方法可以解决这个问题。


我不确定你所说的“成本”是什么意思,但你的怀疑是对的repartition(1)不是正确的解决方案。它将 RDD 重新分区为单个分区。

  • 如果您的数据不适合单台机器,则此操作将会失败。
  • 它仅在以下情况下有效rdd1有一个分区。当您拥有更多数据时,这可能不再成立。
  • repartition执行一个shuffle,因此您的数据最终可能会以不同的方式排序。

我认为正确的解决方案是放弃使用zip,因为您可能无法确保分区匹配。创建密钥并使用join反而:

val indexedRDD1 = rdd1.zipWithIndex.map { case (v, i) => i -> v }
val indexedRDD2 = rdd2.zipWithIndex.map { case (v, i) => i -> v }
val offset = rdd2.count
val indexedRDD3 = rdd3.zipWithIndex.map { case (v, i) => (i + offset) -> v }
val combined =
  indexedRDD1.leftOuterJoin(indexedRDD2).leftOuterJoin(indexedRDD3).map {
    case (i, ((v1, v2Opt), v3Opt)) => i -> (v1, v2Opt.getOrElse(v3Opt.get))
  }

无论分区如何,这都将起作用。如果愿意,您可以对结果进行排序并删除末尾的索引:

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

无法压缩分区数量不等的 RDD 的相关文章

随机推荐

  • 在什么情况下“this”指针被传递给类方法? [复制]

    这个问题在这里已经有答案了 我正在阅读 this 指针 我想我比原来更了解它 但我仍然需要一些澄清 所以 根据我的理解 如果你有 class Simple private int m nID public Simple int nID Se
  • 将 awk 输出保存到变量 [重复]

    这个问题在这里已经有答案了 谁能帮我解决这个问题吗 我正在尝试将 awk 输出保存到变量中 variable ps ef grep port 10 grep v grep port 10 awk printf s 12 printf var
  • 合并两种错误类型的最惯用的方法是什么?

    我有一个类型Foo其方法可能会 引发 关联类型的错误Foo Err pub trait Foo type Err fn foo mut self gt Result lt Self Err gt 我还有一个特点Bar用一种旨在处理的方法Fo
  • Seaborn/Matplotlib 日期轴条形图小主要刻度格式

    我正在构建 Seaborn 条形图 x 轴是日期 y 轴是整数 我想格式化日期的主要 次要刻度 我希望周一的刻度线是粗体的并且是不同的颜色 即 主要刻度线 而本周的其余时间则不那么粗体 我无法在 x 轴上获得主要和次要刻度格式以使用 Sea
  • 在 jquery animate 中,如何使用自定义对象而不是 div?

    我的情况是这样开始的 我想对 div 的背景图像进行动画处理 但似乎使用 jquery 我无法检索背景图像的各个位置 背景位置 所以我想为什么不创建一个对象并为其值设置动画 然后将这些值放入 css 中 但我还不知道如何完全做到这一点 这是
  • 订阅 EnvDTE80.DTE2.Events2.PublishEvents.OnPublishBegin 的正确方法是什么?

    我正在将 VS 插件移植到 VS 包 当包初始化时 包会订阅 OnBuildBegin 和 OnPublishBegin Visual Studio 按预期触发 OnBuildBegin 但从未调用 OnPublishBegin 或多或少相
  • 从发电机生成

    我有一个生成器 它接受一个数字作为参数并生成其他数字 我想使用这个生成器生成的数字并将它们作为参数传递给同一个生成器 创建一个一定长度的链 例如 mygenerator 2 生成 5 4 和 6 将 mygenerator 应用于这些数字中
  • org.postgresql.util.PSQLException:错误:运算符不存在:整数= bytea

    我正在尝试从 Spring Boot 应用程序执行本机查询 但收到此错误 org postgresql util PSQLException 错误 运算符不存在 整数 bytea 这是我为实现此目的而编写的代码 SqlResultSetMa
  • TypeScript - 如何将索引签名表示为通用类型

    TypeScript 中的索引签名定义如下 字典 key string T Array index number T 这些可以包装成一些简单的 可重用的类型 type DictionaryIndex
  • 在 MySQL 的一个查询中使用不同值更新多行

    我试图了解如何用不同的值更新多行 但我只是不明白 解决方案无处不在 但对我来说似乎很难理解 例如 1 个查询中有 3 个更新 UPDATE table users SET cod user 622057 date 12082014 WHER
  • Application.LoadComponent 找不到资源

    我的项目中有一个 xaml 文件 位于Ns1 Ns2 myfile xaml 它的构建操作设置为Page 使用自定义工具MSBuild Compile 我正在尝试在静态构造函数中加载此文件 namespace Ns1 Ns2 interna
  • 如何使用 LINQ 合并两个列表?

    如何使用 LINQ 合并两个列表 如下所示 class Person public int ID get set public string Name get set public Person Merge Person p return
  • 如何检测字符串是否是Base64Encoded?

    检测字符串是否是 Base64Encoded 的最佳方法是什么 使用 Delphi 你能做的最好的事情就是尝试解码它 如果解码失败 则输入未经过 Base64 编码 如果字符串成功解码 则输入might已经经过base64编码
  • SOAP suds 和可怕的模式 Type Not Found 错误

    我正在使用最新版本的肥皂水 https fedorahosted org suds https fedorahosted org suds 第一次 我在第一步就停滞了 suds TypeNotFound Type not found sch
  • 使用 Maven,如何运行特定测试?

    我的项目中有数千个单元测试 我想选择其中一个或几个从命令行运行 执行此操作的命令是什么 您可以通过传递以下内容来运行类中的所有测试 Dtest
  • Symfony2:加载样式表但未在 NGINX 上应用,导致错误页面损坏

    我刚刚安装了一个全新且干净的 Symfony 应用程序 我使用 NGINX 作为我的网络服务器 样式表在 devtools 网络选项卡中不显示 http 404 错误代码 我可以在预览选项卡中正确看到它们的内容 示例图片 有人遇到过这样的问
  • Eclipse 中的 Scala 执行时间

    当我从 Eclipse 运行 Scala 程序时 出现了一些可疑的情况 我运行一个 App 对象 运行需要 7 8 秒 实际执行时间用对象中的 System nanoTime 计时 当我从命令行运行相同的 class 文件时 需要 2 5
  • 从 json_encode($phpArray) 访问 JSON 对象值

    我是 JSON Javascript 新手 遇到了这种性质的问题 在我的 php 脚本中 我将 php 数组传递给 javascript 如下所示 echo img src misc arrow right png 在我的 JavaScri
  • 有没有用于集成复杂功能的 Haskell 库?

    如何在 Haskell 中对复杂的复值函数进行数值积分 有现成的库吗 数字工具 http hackage haskell org package numeric tools仅在卷轴上运行 我知道在复平面上只有线积分 所以我感兴趣的界面是这样
  • 无法压缩分区数量不等的 RDD

    现在我有3个这样的RDD rdd1 1 2 3 4 5 6 7 8 9 10 rdd2 11 12 13 14 rdd3 15 16 17 18 19 20 我想这样做 rdd1 zip rdd2 union rdd3 我想要的结果是这样的