问题3:我想将我的scala地图转换为RDD,在下列情况下我该怎么办?我试图这样做
var mapRDD = sc.parallelize(map.toList)
这是正确的方法吗?
我没有包含整个代码,基本上mapAgainstValue包含userId作为键和朋友列表作为值。我想在密钥中使用以下转换重新创建一个地图RDD。 空地图的原因是什么?
var mapAgainstValue = logData.map(x=>x.split("\t")).filter(x => x.length == 2).map(x => (x(0),x(1).split(",")))
var map:Map[String,List[String]] = Map()
var changedMap = mapAgainstValue.map{
line =>
var key ="";
for(userIds <- line._2){
if(line._1.toInt < userIds.toInt){
key =line._1.concat("-"+userIds);
}
else {
key = userIds.concat("-" + line._1);
}
map += (key -> line._2.toList)
}
}
changedMap.collect()
map.foreach(println)
答案 0 :(得分:4)
是的,您可以使用元组作为Map中的键。
例如:
val userMap = Map(
(1, 25) -> "shankar",
(2, 35) -> "ramesh")
然后您可以尝试使用foreach
val userMapRDD = sparkContext.parallelize(userMap.toSeq, 2)
mapRDD.foreach(element => {
println(element)
})
如果您想将mapRDD转换为其他内容。以下代码仅返回age和name作为元组。
val mappedRDD = userMapRDD.map {
case ((empId: Int, age: Int), name: String) => {
(age, name)
}
}