Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 通过比较减少火花_Apache Spark - Fatal编程技术网

Apache spark 通过比较减少火花

Apache spark 通过比较减少火花,apache-spark,Apache Spark,我有一个元组的RDD,其形式为(key,count),但是有些键是等价的,即 (a,3) (b,4) (c,5) 应该减少到。。。因为a和c是等效的(例如) 有没有办法在Spark中执行此操作 我在想reduce()函数中的某种条件 我认为在reduce操作中没有办法做到这一点,但您可以通过预处理步骤来实现。一个选项是创建链接键的映射[K,K] val in = sc.parallelize(List(("a",3),("b",4),("c",5))) val keyMap: Map[Str

我有一个元组的RDD,其形式为
(key,count)
,但是有些键是等价的,即

(a,3)
(b,4)
(c,5)
应该减少到。。。因为
a
c
是等效的(例如)

有没有办法在Spark中执行此操作


我在想
reduce()
函数中的某种条件

我认为在reduce操作中没有办法做到这一点,但您可以通过预处理步骤来实现。一个选项是创建链接键的
映射[K,K]

val in = sc.parallelize(List(("a",3),("b",4),("c",5)))

val keyMap: Map[String,String] = Map[String,String]("a"->"a",   "b"->"b",   "c"->"a")

val out = in.map{case (k,v) => (keyMap.getOrElse(k,k),v)}.reduceByKey(_+_)

out.take(3).foreach(println)
编辑:

如果
地图
无法安装在驱动程序上,您还可以分发查找:

val in = sc.parallelize(List(("a",3),("b",4),("c",5)))

val keyMap = sc.parallelize(List(("a","a"),("b","b"),("c"->"a")))

val out = in.join(keyMap).map{case (oldKey, (v, newKey)) => (newKey, v)}.reduceByKey(_+_)

out.take(3).foreach(println)

我认为在reduce操作中没有实现这一点的方法,但是可以使用预处理步骤来实现。一个选项是创建链接键的
映射[K,K]

val in = sc.parallelize(List(("a",3),("b",4),("c",5)))

val keyMap: Map[String,String] = Map[String,String]("a"->"a",   "b"->"b",   "c"->"a")

val out = in.map{case (k,v) => (keyMap.getOrElse(k,k),v)}.reduceByKey(_+_)

out.take(3).foreach(println)
编辑:

如果
地图
无法安装在驱动程序上,您还可以分发查找:

val in = sc.parallelize(List(("a",3),("b",4),("c",5)))

val keyMap = sc.parallelize(List(("a","a"),("b","b"),("c"->"a")))

val out = in.join(keyMap).map{case (oldKey, (v, newKey)) => (newKey, v)}.reduceByKey(_+_)

out.take(3).foreach(println)
reduceByKey()
在这里起作用,因为您的数据已经配对了

val baseRDD = sc.parallelize(Seq(("a", 3), ("b", 4), ("a", 5)))
baseRDD.reduceByKey((accum, current) => accum + current).foreach(println)
reduceByKey()
在这里起作用,因为您的数据已经配对了

val baseRDD = sc.parallelize(Seq(("a", 3), ("b", 4), ("a", 5)))
baseRDD.reduceByKey((accum, current) => accum + current).foreach(println)

我很担心,地图是否像RDD一样分发?我有比驱动程序更多的密钥。映射被序列化并从驱动程序传递给每个执行者。因此,是的,如果你不能适应司机,这将不起作用。我已经用一个例子更新了答案,说明什么时候也需要分发映射:-)这似乎很有效,刚刚为我的具体案例解决了一些细节问题。谢谢你的帮助!我很担心,地图是否像RDD一样分发?我有比驱动程序更多的密钥。映射被序列化并从驱动程序传递给每个执行者。因此,是的,如果你不能适应司机,这将不起作用。我已经用一个例子更新了答案,说明什么时候也需要分发映射:-)这似乎很有效,刚刚为我的具体案例解决了一些细节问题。谢谢你的帮助!求和时按键缩进,但在这种情况下,
a
c
不是直接等效的,它们需要定义特殊等效。求和时按键缩进,但在这种情况下,
a
c
不是直接等效的,它们需要定义特殊等效。