- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我看到了以下帖子:Understanding TreeReduce in Spark
我仍在尝试准确了解何时使用 treeReduce 和 reduceByKey。我认为我们可以使用诸如字数统计之类的通用示例来帮助我进一步了解正在发生的事情。
编辑:所以在 spark-shell 中玩,我想我根本不了解 treeReduce 的概念,但希望一个例子和这些问题有所帮助。
res2: Array[(String, Int)] = Array((D,1), (18964,1), (D,1), (1,1), ("",1), ("",1), ("",1), ("",1), ("",1), (1,1))
scala> val reduce = input.reduceByKey(_+_)
reduce: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[11] at reduceByKey at <console>:25
scala> val tree = input.treeReduce(_+_, 2)
<console>:25: error: type mismatch;
found : (String, Int)
required: String
val tree = input.treeReduce(_+_, 2)
最佳答案
两者有本质的区别——reduceByKey
只在键值对RDDs上可用,而treeReduce
是reduce
的泛化> 对任何 RDD 的操作。 reduceByKey
用于实现 treeReduce
但它们在任何其他意义上都没有关系。
reduceByKey
对每个键执行归约,产生一个 RDD;它不是 RDD 意义上的“ Action ”,而是返回 ShuffleRDD 的转换。这等效于 groupByKey
后跟一个 map
进行按键缩减(检查 this 为什么使用 groupByKey
效率低下)。
另一方面,treeAggregate
是 reduce
函数的泛化,其灵感来自 AllReduce
。这是 Spark 意义上的“ Action ”,在主节点上返回结果。正如您问题中发布的链接所解释的那样,在执行本地归约操作后,reduce
在主节点上执行其余的计算,这可能非常繁重(尤其是在机器学习中,当归约函数导致大向量或矩阵)。相反,treeReduce
使用 reduceByKey
并行执行归约(这是通过动态创建键值对 RDD 来完成的,键由树的深度决定; 检查实现 here )。
所以,要回答你的前两个问题,你必须使用 reduceByKey
来计算字数,因为你有兴趣获得每个字数,而 treeReduce
在这里不合适.其他两个问题与本主题无关。
关于apache-spark - Spark中的treeReduce与reduceByKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34078430/
我一直试图让它工作一段时间,但每次都失败了。我有 2 个文件。有一个名字列表: Name1 Name2 Name3 Name4 另一个是与几年中一年中每一天的名称关联的值列表: ['0.1,0.2,0
如果我有一个像这样的 K,V 对: (K, (v1, v2)) (K, (v3, v4)) 我怎样才能总结出我得到的值(k, (v1 + v3, v2 + v4)) ? 最佳答案 reduceByKe
我正在 Spark 上编写一个程序,我只是通过键进行聚合。该程序非常简单。我的输入数据只有 2GB,在设置为 local[2] 的多核服务器(8 核,32GB RAM)上运行。那就是使用两个内核进行并
我想使用 RDD 对 Tuple2 ,但是byte[]内容相同的s被认为是不同的值,因为它们的引用值不同。 我没有看到任何要传递给自定义比较器的东西。我可以转换 byte[]进入 String使用显式
嗨,我有代码只是从文档中获取字数。在生成输出之前,我还需要使用 map 来查找数据值。这是代码。 requests .filter(_.description.exists(_.leng
我的输入数据集看起来像 id1, 10, v1 id2, 9, v2 id2, 34, v3 id1, 6, v4 id1, 12, v5 id2, 2, v6 我想要输出 id1; 6,v4 | 1
我的问题类似于PySpark reduceByKey on multiple values但有一个关键的区别。我是 PySpark 的新手,所以我肯定错过了一些明显的东西。 我有一个具有以下结构的 R
我正在使用 Spark 1.5/1.6,我想在 DataFrame 中执行 reduceByKey 操作,我不想将 df 转换为 rdd。 每行看起来像,我有多个 id1 行。 id1, id2, s
我有一个 RDD,其中包含某些对象的计数,然后我在其上应用 reduceByKey(),对所有元素求和(如字数统计示例中所示)。我已将 reduceByKey 转换的输出保存到文本文件中,并且获得了每
为什么 Spark 强制从元组列表构建 RDD,以防进行 reducebykey 转换? reduce_rdd = sc.parallelize([{'k1': 1}, {'k2': 2}, {'k1
我有一个这样的rdd // Structure List[Tuple(x1, x2, value), Tuple(x1, x2, value)] data = [('23', '98', 34), (
我有一个像这样的 rdd: rdd = [((uid1), (product1, price1, date1)), ((uid1), (product2, price2, date2))
我确定这是非常简单的事情,但我没有找到与此相关的任何内容。 我的代码很简单: ... stream = stream.map(mapper) stream = stream.reduceByKey(r
我想对每个键的值列表进行分组,并且正在做这样的事情: sc.parallelize(Array(("red", "zero"), ("yellow", "one"), ("red", "two")))
我正在使用 Spark 版本 2.4.7-amzn-1 和 Scala 版本 2.11.12(OpenJDK 64 位服务器虚拟机,Java 1.8.0_302)开发 AWS EMR。 我想通过键减少
我正在将 spark 与 scala 一起使用,并且我有一个充满 tuple2 的 RDD,其中包含一个复杂对象作为键和一个 double 对象。如果对象相同,则目的是添加双倍(频率)。 为此,我将我
在对一些稀疏向量进行聚类后,我需要在每个聚类中找到相交向量。为此,我尝试减少 MLlib 向量,如下例所示: import org.apache.spark.SparkConf import org.
最近我有一个场景将数据存储在 keyValue Pair 中,并遇到了一个函数 reduceByKey(_ ++ _) .这更多是速记语法。我无法理解这实际上意味着什么。 例如:reduceBykey
作为我学习过程的一部分,我正在研究现有的 Spark 代码,我遇到了以下代码: enPages.map(lambda x: x.split(" "))\ .map(lambda x:
除了 RDDs 之外,我正在尝试学习更多地使用 DataFrames 和 DataSets。对于 RDD,我知道我可以做 someRDD.reduceByKey((x,y) => x + y) ,但我
我是一名优秀的程序员,十分优秀!