当前位置: 首页 > 面试题库 >

谁能在Spark中为`combineByKey`提供清晰的解释?

葛泳
2023-03-14
问题内容

我正在学习spark,但是我不明白此功能combineByKey

>>> data = sc.parallelize([("A",1),("A",2),("B",1),("B",2),("C",1)] )
>>> data.combineByKey(lambda v : str(v)+"_", lambda c, v : c+"@"+str(v), lambda c1, c2 : c1+c2).collect()

输出为:

[('A', '1_2_'), ('C', '1_'), ('B', '1_2_')]

首先,我很困惑:@第二步在哪里lambda c, v : c+"@"+v?我@从结果中找不到。

其次,我阅读了的功能说明combineByKey,但对算法流程感到困惑。


问题答案:

groupByKey调用不会尝试合并/合并值,因此这是一项昂贵的操作。

因此,combineByKey调用就是这样的优化。当使用combineByKey值在每个分区上合并为一个值时,则每个分区值将合并为单个值。值得注意的是,合并值的类型不必与原始值的类型匹配,并且通常不需要。该combineByKey函数以3个函数作为参数:

  1. 创建组合器的函数。在aggregateByKey函数中,第一个参数只是一个初始零值。在其中,combineByKey我们提供了一个接受当前值作为参数并返回将与其他值合并的新值的函数。

  2. 第二个函数是合并函数,它采用一个值并将其合并/合并为以前收集的值。

  3. 第三个功能将合并的值组合在一起。基本上,此函数采用在分区级别产生的新值并将其组合,直到最终得到一个奇异值。

换句话说,要理解combineByKey,考虑一下它如何处理所处理的每个元素很有用。如combineByKey通过在一个分区中的元素进入,每个元件或者具有它之前还没有看到一个键或具有相同的密钥作为前一个元素。

如果是新元素,请combineByKey使用我们提供的称为的函数createCombiner()在该键上为累加器创建初始值。重要的是要注意,这是在每个分区中第一次找到密钥时发生的,而不是第一次在RDD中发现密钥时发生。

如果它是我们在处理该分区时以前见过的值,它将使用提供的函数,mergeValue()该键的累加器的当前值和新值。

由于每个分区都是独立处理的,因此对于同一个密钥,我们可以有多个累加器。当我们合并每个分区的结果时,如果两个或多个分区具有同一键的累加器,我们将使用用户提供的mergeCombiners()功能合并累加器。

参考文献:

  • 学习Spark-第4章。
  • 在Apache-Spark博客条目中使用CombineByKey。


 类似资料:
  • 问题内容: 考虑以下测试用例,其中一个float元素和一个inline元素放置在a 与a之内: 呈现时,字段集的高度为200像素(它们清除浮点数了吗?),而div的高度仅与内联元素一样高。造成这种现象的原因是什么,是否有一种解决方法可以使这些字段集像div一样起作用? 问题答案: 显然,元素应该为其内容生成块格式上下文: 期望该元素建立新的块格式化上下文。 这就是为什么浮动元素不会从其中浮动出来的

  • 问题内容: 我正在寻找有关关系代数中theta join概念的清晰,基本的解释,并且可能需要一个示例(也许使用SQL)来说明其用法。 如果我正确理解,则theta联接是添加了条件的自然联接。因此,尽管自然联接在相同名称的属性之间强制相等(并删除重复的属性?),但是theta联接执行相同的操作,但是增加了在某种情况下。我有这个权利吗?以简单的术语(对于非数学家)的任何清楚的解释将不胜感激。 另外(很

  • 问题内容: 只是一个简单的问题: 如何清除外壳中的屏幕?我见过类似的方式: 这只是打开Windows cmd,清除屏幕并关闭,但是我希望清除外壳窗口 (PS:我不知道这有帮助,但是我使用的是Python 3.3.2版) 谢谢:) 问题答案: 对于macOS / OS X,您可以使用子进程模块并从外壳程序中调用“ cls”: 为了防止在窗口顶部显示“ 0”,请用以下内容替换第二行: 对于Linux,

  • 本文向大家介绍python中yield的用法详解——最简单,最清晰的解释,包括了python中yield的用法详解——最简单,最清晰的解释的使用技巧和注意事项,需要的朋友参考一下 首先我要吐槽一下,看程序的过程中遇见了yield这个关键字,然后百度的时候,发现没有一个能简单的让我懂的,讲起来真TM的都是头头是道,什么参数,什么传递的,还口口声声说自己的教程是最简单的,最浅显易懂的,我就想问没有有考

  • 问题内容: 我无法理解网页的的文档中。 谁能简单地向我解释一下? 问题答案: 背后的想法是它将转换您的数据,使其分布的平均值为0,标准差为1。 对于多变量数据,这是按功能进行的(换句话说,独立于数据的每一列) 。 给定数据的分布,数据集中的每个值都将减去平均值,然后除以整个数据集(或多变量情况下的特征)的标准差。

  • 获得场景视频可为客户转出“普通”“清晰”“高清”“pad”“phone”五种的清晰度,转出越多占用空间越大,您可根据实际需求具体选择。 在该页面,您可为用户设置默认清晰度,以满足效果和成本的平衡。 默认码率和对应视频尺寸见下表: 清晰度规则: · 您上传的视频源文件视频码率高于512kbps或分辨率大于640×480才能转换出高清视频; · 对于多种清晰度的视频,获得场景视频服务平台支持您设置您帐