Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark t火花中的减压阀与减压阀_Apache Spark - Fatal编程技术网

Apache spark t火花中的减压阀与减压阀

Apache spark t火花中的减压阀与减压阀,apache-spark,Apache Spark,我看到下面的帖子有点回溯: 我仍在努力准确地理解何时使用treeReduce和reduceByKey。我想我们可以使用一个通用的例子,比如单词计数,来帮助我进一步了解正在发生的事情 在字数统计中使用reduceByKey总是有意义的吗 或者当treeReduce更有意义时,是否存在特定大小的数据 当treeReduce是更好的选择时,是否有特定的案例或规则 同样,这也可以在上面基于reduceByKey得到回答,但是reduceByKey局部和treeReduce是否有任何变化 如何正确确定深

我看到下面的帖子有点回溯:

我仍在努力准确地理解何时使用treeReduce和reduceByKey。我想我们可以使用一个通用的例子,比如单词计数,来帮助我进一步了解正在发生的事情

  • 在字数统计中使用reduceByKey总是有意义的吗
  • 或者当treeReduce更有意义时,是否存在特定大小的数据
  • 当treeReduce是更好的选择时,是否有特定的案例或规则
  • 同样,这也可以在上面基于reduceByKey得到回答,但是reduceByKey局部和treeReduce是否有任何变化
  • 如何正确确定深度
编辑:在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)
res2:Array[(String,Int)]=数组((D,1)、(18964,1)、(D,1)、(1,1),(“”,1),(“”,1),(“”,1),(“”,1),(“”,1),(“”,1),(“”,1,1))
scala>val reduce=input.reduceByKey(+389;)
reduce:org.apache.spark.rdd.rdd[(String,Int)]=ShuffledRDD[11]位于reduceByKey:25
scala>val tree=input.treeReduce(+2)
:25:错误:类型不匹配;
找到:(字符串,Int)
必需:字符串
val tree=input.TREEREDUCT(+2)

这两种方法之间存在根本区别-
reduceByKey
仅适用于键值对RDD,而
treeReduce
是任何RDD上
reduce
操作的推广
reduceByKey
用于实现
treeReduce
,但它们在任何其他意义上都不相关

reduceByKey
对每个键执行还原,生成RDD;它不是RDD意义上的“动作”,而是返回ShufferDD的转换。这相当于
groupByKey
后面跟着一个执行按键缩减的
map
(检查为什么使用
groupByKey
效率低下)

另一方面,
treeaggreegate
reduce
函数的推广,灵感来自
AllReduce
。这是spark意义上的“动作”,在主节点上返回结果。正如您问题中的链接所解释的,在执行本地reduce操作后,
reduce
在主机上执行其余的计算,这可能非常繁重(特别是在机器学习中,当reduce函数生成大向量或矩阵时)。相反,
treeReduce
使用
reduceByKey
并行执行缩减(这是通过动态创建键值对RDD来完成的,键值对由树的深度决定;检查实现)

因此,为了回答前两个问题,您必须使用
reduceByKey
进行字数计算,因为您感兴趣的是获得每个字数,而
treeReduce
在这里并不合适。另外两个问题与本主题无关