【发布时间】:2015-11-16 20:11:49
【问题描述】:
我正在尝试在 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[(String, Int)] 时是 RDD[Map[String, Int]]。
那么我怎样才能摆脱上面pairs 中的可迭代项以将 Map 转换为只是一个 tuple2?
【问题讨论】:
-
正如我在回答中已经写的:为什么要为每个单词创建一个新的
Map。这似乎不是故意的。请仔细阅读我的(修订后的包括证明)答案。使用s => (s,1)而不是Map( s-> 1)。如果我的回答不符合您的要求,请简明扼要地重新表述您的问题。谢谢! -
这是说明问题的示例代码,而不是包含我的复杂代码。显然,如果没有地图,就没有问题,也没有问题。第 3 行的问题由接受的答案解决。你的通过更改没有帮助的示例代码来避免这个问题。
标签: scala apache-spark