在 Apache Spark (Scala) 中使用 reduceByKey

2023-12-31

我有一个类型为:(用户 ID、名称、计数)的元组列表。

例如,

val x = sc.parallelize(List(
    ("a", "b", 1),
    ("a", "b", 1),
    ("c", "b", 1),
    ("a", "d", 1))
)

我试图将这个集合简化为一种类型,其中每个 元素名称被计算在内。

所以上面的 val x 被转换为:

(a,ArrayBuffer((d,1), (b,2)))
(c,ArrayBuffer((b,1)))

这是我当前使用的代码:

val byKey = x.map({case (id,uri,count) => (id,uri)->count})

val grouped = byKey.groupByKey
val count = grouped.map{case ((id,uri),count) => ((id),(uri,count.sum))}
val grouped2: org.apache.spark.rdd.RDD[(String, Seq[(String, Int)])] = count.groupByKey

grouped2.foreach(println)

我正在尝试使用reduceByKey,因为它的执行速度比groupByKey 更快。

如何实现reduceByKey来代替上面的代码来提供 相同的映射?


按照您的代码:

val byKey = x.map({case (id,uri,count) => (id,uri)->count})

你可以这样做:

val reducedByKey = byKey.reduceByKey(_ + _)

scala> reducedByKey.collect.foreach(println)
((a,d),1)
((a,b),2)
((c,b),1)

PairRDDFunctions[K,V].reduceByKey采用可应用于 RDD[(K,V)] 的 V 类型的关联归约函数。换句话说,你需要一个函数f[V](e1:V, e2:V) : V。在这种特殊情况下,整数求和:(x:Int, y:Int) => x+y or _ + _用短下划线表示法。

作为记录:reduceByKey表现优于groupByKey因为它尝试在 shuffle/reduce 阶段之前本地应用 reduce 函数。groupByKey将在分组之前强制对所有元素进行洗牌。

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

在 Apache Spark (Scala) 中使用 reduceByKey 的相关文章

随机推荐

  • 如何知道哪个列表项对用户可见?

    我通过我的应用程序录制了视频 并将其存储在存储卡中 在我获取这些视频并将其添加到列表视图后 根据屏幕尺寸 用户只能看到一个视频 如果用户上下滚动并停止 那时我想知道哪一个在用户面前 如果有人知道解决方案请帮助我 或任何其他方法 提前致谢 好
  • Apache Lucene TokenStream 合同违规

    使用 Appache Lucene TokenStream 删除停用词 导致错误 TokenStream contract violation reset close call missing reset called multiple t
  • Ceres Solver:无法禁用日志记录(google glog)

    我在一个项目中使用 ceres 求解器 当我调用ceres Solve函数后 库开始输出如下行 iterative schur complement solver cc 88 No parameter blocks left in the
  • 根据另一个 NSArray 字符串的排序对自定义对象的 NSArray 进行排序

    我有两个NSArray我想要以相同方式排序的对象 一个包含NSString对象 其他自定义Attribute对象 这是我的 关键 NSArray 的样子 The master order NSArray stringOrder NSArra
  • spring-boot 与 tomcat 和 cxf-servlet

    我正在尝试使用 spring boot 来建立嵌入式 Tomcat 我想在应用程序中使用 CXF 来提供一组 Web 服务 但我不知道如何建立 CXF servlet 我的主课看起来像这样 Configuration EnableAutoC
  • 在 Android 中使用相机活动

    如果您想使用使用本机 Android 相机的内置相机 Activity 只需执行以下操作即可 Intent camera new Intent MediaStore ACTION IMAGE CAPTURE this startActivi
  • 为什么我们仍然在 .NET 中使用数据集?

    数据集是 NET 1 0 中最重要的东西之一 即使现在使用 NET 3 5 我仍然发现自己必须使用它们 特别是当我必须调用一个返回数据集的存储过程时 我最终会得到该数据集手动转换为对象以使其更易于使用 我从来没有真正喜欢过数据集 并且发现它
  • django 将 .values_list('datetimefield') 转换为日期

    我想将带有日期时间对象的 value list 字段转换为日期对象 values list time finished flat True 给我 2016 03 22T18 52 53 486Z 我想要的是 2016 03 22 谢谢你 您
  • Autofac多次注册组件

    在上一个关于如何可视化依赖关系图的问题中 https stackoverflow com a 59247007 1955317我为现在用来可视化我的依赖关系图的代码奠定了基础 因为它是由 Autofac 解析的 运行代码 我得到一棵树 生成
  • 为什么java进程使用的内存比预期多得多

    系统信息 操作系统 archlinux JDK OpenJDK IcedTea 2 4 3 ArchLinux 版本 7 u45 2 4 3 1 x86 64 运行应用程序 https github com aemoncannon ensi
  • 是否可以将观察者添加到tableView.contentOffset?

    我需要跟踪 tableView contentOffset y 是否可以将观察者添加到 tableView contentOffset 我认为这是不可能的 因为 contentOffset 不继承 NSObject 类 还有其他解决办法吗
  • 将递归函数转换为异步 CPS 实现 (javascript)

    这是我的功能 function duplicate step through highlighted element jq target jq char cb console log element jq var contents elem
  • 如何在R中手动更改VisNetwork中节点的位置

    我的 VisNetwork 遇到问题 我在 R 中创建了一个图表 每次单击节点并将其移动到其他位置时 它都会回到之前的位置 是否有可能手动重新安排网络 我想将一些节点移动到其他位置或更改一些节点之间的边的长度 以便它更加透明 至少有两种可能
  • 我从 C 函数读取嵌套 lua 表作为参数是否正确?

    我将用C语言实现一个函数 该函数将由Lua脚本调用 这个函数应该接收一个lua表 甚至包含一个数组 作为参数 所以我应该读取表中的字段 我尝试像下面那样做 但是当我运行它时我的函数崩溃了 谁能帮我找出问题所在吗 function findI
  • Fedora 24 上的 libicu 和 stringi 导致 R 头痛

    我最近升级到 F24 现在在我的 R 会话中我无法加载一些包 sp reshape2 latex2exp knitr 等 我发现的最初问题是 F24 使用 libicu56 而这些软件包需要 libicu54 我遵循了一个建议这个线程 ht
  • 如何以编程方式更改 Chrome 中地址栏的字体大小

    我想以编程方式更改 Chrome 中地址栏的字体大小 因为它对我来说太大了 有什么办法可以做到这一点吗 通常 地址栏的字体大小由操作系统的默认字体大小决定 在这里阅读评论 https code google com p chromium i
  • 如何在 Java 中将十六进制字符串转换为字节值

    我有一个字符串数组 我想将它转换为字节数组 我使用Java程序 例如 String str aa 55 转换成 byte new byte 0xaa byte 0x55 我能做些什么 String str Your string byte
  • 通过ParentProcessID杀死进程

    我想通过其 ParentProcessID 终止正在运行的进程 我想像您在命令行中一样执行此操作 wmic process where parentprocessid 3008 terminate 但现在的问题是 在 PowerShell
  • 仪表 D3,显示值位置

    我正在尝试使用一些现成的 JavaScript 来制作仪表 我快到了 但我不知道如何管理值标题 Here is how my code works now And this is how I like it to work 不知道如何处理问
  • 在 Apache Spark (Scala) 中使用 reduceByKey

    我有一个类型为 用户 ID 名称 计数 的元组列表 例如 val x sc parallelize List a b 1 a b 1 c b 1 a d 1 我试图将这个集合简化为一种类型 其中每个 元素名称被计算在内 所以上面的 val