我正在尝试在spark中创建PairRDD。为此,我需要一个tuple2 RDD,例如RDD[(String, String)]
。但是,我有一个RDD[Map[String, String]]
。
我想不出如何摆脱可迭代的方法,所以我只剩下RDD[(String, String)]
而不是例如RDD[List[(String, String)]]
。
我要进行工作的一个简单演示是此损坏的代码:
val lines = sparkContext.textFile("data.txt")
val pairs = lines.map(s => Map(s -> 1))
val counts = pairs.reduceByKey((a, b) => a + b)
最后一行不起作用,因为它pairs
是,RDD[Map[String, Int]]
当它需要是时RDD[(String, Int)]
。
那么,如何摆脱pairs
上面的可迭代方法,将Map转换为tuple2呢?
您实际上可以运行:
val counts = pairs.flatMap(identity).reduceByKey(_ + _)
请注意,使用身份功能复制flatten
RDD上的功能,并且该reduceByKey()
功能具有简洁的下划线表示法,以简化操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句