Apache spark 通过比较减少火花
我有一个元组的RDD,其形式为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
(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
不是直接等效的,它们需要定义特殊等效。