Spark:reduce和reduceByKey之间的语义差异

2023-12-22

在 Spark 的文档中,它说 RDDs 方法reduce http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.RDD需要一个结合与交换的二元函数。

然而,该方法reduceByKey http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.PairRDDFunctions仅需要关联二元函数。

sc.textFile("file4kB", 4)

我做了一些测试,显然这就是我得到的行为。为什么会有这样的差异?为什么reduceByKey确保二元函数始终按特定顺序应用(以适应交换律的缺乏)reduce才不是?

例如,如果加载一些具有 4 个分区(最少)的(小)文本:

val r = sc.textFile("file4k", 4)

then:

r.reduce(_ + _)

返回一个字符串,其中各部分的顺序并不总是相同,而:

r.map(x => (1,x)).reduceByKey(_ + _).first

始终返回相同的字符串(其中所有内容的顺序与原始文件中的顺序相同)。

(我检查过r.glom并且文件内容确实分布在4个分区上,不存在空分区)。


就我而言,这是文档中的错误,您看到的结果只是偶然的。实践,其他资源 http://ampcamp.berkeley.edu/3/exercises/data-exploration-using-spark.html和一个简单的代码分析 https://github.com/apache/spark/blob/b122c861cd72b580334a7532f0a52c0439552bdf/core/src/main/scala/org/apache/spark/rdd/PairRDDFunctions.scala#L72显示该函数传递给reduceByKey不仅应该是结合律,而且还应该是交换律。

  • 实践 - 虽然看起来顺序是在本地模式下保留的,但当您在集群上运行 Spark(包括独立模式)时,情况就不再如此。

  • 其他资源 - 引用使用 Spark 进行数据探索 http://ampcamp.berkeley.edu/3/exercises/data-exploration-using-spark.html from 扩音营 3 http://ampcamp.berkeley.edu/3/exercises/index.html:

    Spark 中有一个名为reduceByKey 的便捷方法正是针对这种模式。请注意,reduceByKey 的第二个参数决定要使用的化简器数量。默认情况下,Spark 假定reduce 函数是可交换和关联的,并在映射器端应用组合器。

  • code - reduceByKey是使用实现的combineByKeyWithClassTag并创造ShuffledRDD。由于 Spark 不保证打乱后的顺序,因此恢复它的唯一方法是将一些元数据附加到部分减少的记录上。据我所知,没有发生过这样的事情。

附注reduce因为它是在 PySpark 中实现的,所以它可以与仅可交换的函数一起正常工作。当然,这只是实施的细节,而不是合同的一部分。

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

Spark:reduce和reduceByKey之间的语义差异 的相关文章

随机推荐

  • 泛型 在 C# 中不起作用,即使运行没有任何错误

    我正在使用 Silverlight 5 VS 2010 创建一个 C Web 应用程序 首先 我创建了控制台应用程序 一切正常 但是当我在网络应用程序中执行此操作时会出现问题 即使在网络应用程序中 它对于特定的设置数据类型也能正常工作 例如
  • 旧版本的 spring boot 无法在 Java 11 上启动

    我正在使用 spring boot 应用程序的 1 4 1 RELEASE Java 8 一切正常 但是 当我将 java 版本更新到 11 时 我无法使用命令运行应用程序mvn clean spring boot run 同时我可以打包成
  • 覆盖getter只需要@synthesize

    我想覆盖惰性实例化的 getter 并保留默认的 setter 我需要 synthesize 吗 Why interface Foo property strong nonatomic NSObject bar end implementa
  • 表达式/语句树

    进一步更新问题 我一直在尝试使用 NET 4 中的表达式树在运行时生成代码 并且我一直在尝试实现foreach通过构建表达式树来声明 最后 表达式应该能够生成执行此操作的委托 Action
  • 如何在 git 上执行 3 向视觉差异?

    我想对存在于 2 个不同分支中的单个文件进行 3 路比较 即每个分支中的最后一次提交 并考虑共同的祖先 我想使用一个允许进行三向比较的外部工具 我正在考虑使用 git difftool 但据我所知 它只允许比较给定文件的任何两个版本 我可以
  • 计算嵌套列表中包含特定元素的列表的数量

    我有一个列表 例如 res a b a a b c a 我想计算有多少个列表包含特定字母 例如 a 包含在 3 个列表中 b 包含在 2 个列表中 c 包含在 1 个列表中 下面的代码是我到目前为止所拥有的 count 0 docs a l
  • Visual Studio 2013 的 RC 更新 2 共享项目

    我最近安装了 Visual Studio 2013 的 RC 更新 2 在浏览通用应用程序的模板时 我发现了一个项目 Shared其中有一个扩展 shproj 当我在网上浏览一些材料时 我发现它是一个用于共享代码和文件的项目模板 我认为这很
  • clang-format 正则表达式语法参考

    我希望 clang format 不修改我用来分隔函数的注释行 我认为commentPragmas是正确的选择 但我找不到有关 clang format 正则表达式格式的信息 I tried commentPragmas 捕捉我的分隔线 看
  • 如何在 PHP 中包含其他文件?

    我刚刚开始在家里创建一个网站 当然 我必须有这两个页面才能快速完成我的网站 footer php header php 所以我创建了这些页面并放置了一些内容 还创建了一个索引页作为index php在 的里面htdocs folder 然后
  • 并行运行多个查询动画

    我有两个路由组件及其容器 我已为其设置了动画触发器 slide 其中我查询每个并相应地设置动画 div div
  • 如何检测屏幕脚轮android,检测点击压力

    我开发了一个玩起来很有趣的应用程序 但有一些顽皮的人通过使用不同类型的方式破坏其他人的乐趣屏幕脚轮然后玩弄自动化脚本并欺骗用户 这是一个链接 http code google com p androidscreencast 一位非常著名的屏
  • MagicalRecords 从 JSON / NSDictionary 导入数据。导入关系

    我对人际关系有疑问 我必须使用 NSManagedObject 类 Team 和 Player 团队可以包含许多玩家 玩家只能包含一支球队 以下是两个请求的 JSON team id 1 name Chicago Bulls city Ch
  • Excel VBA 工作簿.ChangeFileAccess

    我在使用 VBA 更改 Excel 工作簿上的文件访问模式时遇到问题 我使用的是 Office 2010 我希望能够适当地在只读和读写模式之间切换 然而 似乎将工作簿从读 写更改为只读 然后再返回 如下面的代码所示 在尝试访问工作簿对象的任
  • XML 两个同名标签

    在我的 XML 文档中 我有两个同名的标签 都称为 item 我现在已经为此文档创建了一个 XML 架构 考虑到我有两个同名的标签 我的 XML 架构准确吗 XML文档
  • 无法在我自己的代码中将 CHOLMOD 与 CUDA 加速一起使用

    我正在尝试使用CHOLMOD with CUDA加速度SuiteSparse 4 4 4 我按照用户指南编译了它 我可以运行gpu sh under Demo文件夹成功 这表明GPU正在做部分工作 但是 当我尝试使用运行我自己的代码时CHO
  • 以编程方式加载 SSIS 包配置

    我正在 SSIS 中制作一个框架 用于从可配置文件夹加载文件并将它们与数据库中的逻辑作业相匹配 在此作业中配置了包名称 并在 SSIS 中我在运行时执行此包 我想根据加载的作业以编程方式加载此包的包配置 SSIS SQL Server 包配
  • 基于 SAML 断言的 SAML2 身份验证和授权

    我在用着spring security saml2 service provider针对 SAML IdP 验证我的 SpringBoot Web 应用程序 这有效 我还可以使用 REST 控制器访问 SAML 断言 Authenticat
  • H2数据库:使用jdbcTemplate插入记录时,列“ID”不允许为NULL

    我使用 hibernate 的 hbm2ddl 自动生成模式 这是我的域名 Entity public class Reader Id GeneratedValue strategy GenerationType AUTO Long id
  • 推送通知加密错误

    我在 PHP Laravel 应用程序中使用 Push Notifs 我创建了一个 pem 文件并对其进行了测试 在我的开发机器上使用它时 它可以正确推送到移动设备 当我现在将整个项目推送到生产服务器并启动 Pushnotif 调用时 我收
  • Spark:reduce和reduceByKey之间的语义差异

    在 Spark 的文档中 它说 RDDs 方法reduce http spark apache org docs latest api scala index html org apache spark rdd RDD需要一个结合与交换的二