如何使用RDD API反转reduceByKey的结果?

2024-04-04

我有一个 (key, value) 的 RDD,我将其转换为 (key, List(value1, value2, value3) 的 RDD,如下所示。

val rddInit = sc.parallelize(List((1, 2), (1, 3), (2, 5), (2, 7), (3, 10)))
val rddReduced = rddInit..groupByKey.mapValues(_.toList)
rddReduced.take(3).foreach(println)

这段代码给了我下一个 RDD : (1,列表(2, 3)) (2,列表(5, 7)) (3,列表(10))

但现在我想从我刚刚计算的 rdd(rddReduced rdd)返回到 rddInit。

我的第一个猜测是实现键和列表中每个元素之间的某种叉积,如下所示:

rddReduced.map{
  case (x, y) =>
    val myList:ListBuffer[(Int, Int)] = ListBuffer()
    for(element <- y) {
      myList+=new Pair(x, element)
    }
    myList.toList
}.flatMap(x => x).take(5).foreach(println)

通过这段代码,我得到了初始 RDD 结果。但我不认为在 Spark 作业中使用 ListBuffer 是一个好的做法。还有其他方法可以解决这个问题吗?


我很惊讶没有人提供 Scala 的解决方案用于理解(这被“脱糖”为flatMap and map在编译时)。

我不经常使用这种语法,但是当我使用时......我发现它非常有趣。有些人更喜欢理解而不是一系列flatMap and map,特别是。用于更复杂的转换。

// that's what you ended up with after `groupByKey.mapValues`
val rddReduced: RDD[(Int, List[Int])] = ...
val r = for {
  (k, values) <- rddReduced
  v <- values
} yield (k, v)

scala> :type r
org.apache.spark.rdd.RDD[(Int, Int)]

scala> r.foreach(println)
(3,10)
(2,5)
(2,7)
(1,2)
(1,3)

// even nicer to our eyes
scala> r.toDF("key", "value").show
+---+-----+
|key|value|
+---+-----+
|  1|    2|
|  1|    3|
|  2|    5|
|  2|    7|
|  3|   10|
+---+-----+

毕竟,这就是我们享受 Scala 灵活性的原因,不是吗?

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

如何使用RDD API反转reduceByKey的结果? 的相关文章

随机推荐

  • 在 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 我想要的结果是这样的
  • NodeJS 模块与类

    对我来说 类与 NodeJS CommonJS 模块非常相似 您可以拥有许多它们 它们可以重复使用 它们可以互相使用 并且通常每个文件一个 是什么让模块与类如此不同 使用它们的方式不同 命名空间的差异也很明显 除此之外 它们对我来说似乎非常
  • PyQt_Fit:无法导入名称路径

    我正在尝试使用 PyQt Fit 我从 pip install pyqt fit 安装了它 但是当我导入它时它不起作用并显示以下消息 ImportError Traceback most recent call last
  • 使用 Bouncy Castle 在 Java 中复制“openssl smime”?

    我手上有个问题 我不懂 Java 的同事正在使用 OpenSSL 命令对文件进行签名 如下所示 openssl smime binary sign certfile WWDR pem signer passcertificate pem i
  • .fit() 层的 shuffle = 'batch' 参数如何在后台工作?

    当我使用以下方法训练模型时 fit 层的参数 shuffle 预设为 True 假设我的数据集有 100 个样本 批量大小为 10 当我设置shuffle True然后 keras 首先随机选择样本 现在 100 个样本具有不同的顺序 根据
  • 在 Android 应用程序中查看 MS Office 文件

    我正在尝试查看应用程序中的文件 例如音频 视频 PDF 等 我已经成功地做到了这一点 现在我正在尝试查看 Microsoft Office 文件 例如 doc docx xls 和 ppt 在android中有什么办法可以做到这一点 比如调
  • ViewModelProviders 无法在我的片段中工作

    这就是我正在尝试做的事情 Set an ArrayListFragment 内的对象 从观察者处获取该数组FragmentActivity容器 承载所有片段的活动 所以 我所做的如下 首先我创建了SharedViewModel我将从哪里设置
  • GTK+ CSS 一键式

    如何在 GTK 中为一个按钮设置颜色 GtkButton button8 border radius 20 border width 1 1 1 1 font Sans 16 color black background image gtk
  • 使用从 csv 文件读取的矩阵中的 corrplot 函数时,“dimnames”[2] 的长度不等于数组范围

    我想从 csv 文件读取数据 将其保存为矩阵并将其用于可视化 data lt read table Desktop Decision Tree cor test csv header F sep data V1 V2 V3 V4 V5 V6
  • 如何使用RDD API反转reduceByKey的结果?

    我有一个 key value 的 RDD 我将其转换为 key List value1 value2 value3 的 RDD 如下所示 val rddInit sc parallelize List 1 2 1 3 2 5 2 7 3 1