2016-10-22 77 views
1
  • 问题1:我可以使用元组作为Scala中的地图的键吗?
  • 问题2:如果是,我怎样才能创建一个元组作为关键的地图?
  • 问题3:我想将我的Scala地图转换为RDD,在下列情况下我该怎么做?我想用这种方式使用元组作为scala中的键

    var mapRDD = sc.parallelize(map.toList) 
    

    这是做正确的方式做?

  • 问题4:对于这个特定的代码片段,当我在地图上做一个println时,它没有值。

我没有包括整个代码,基本上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) 

回答

3

是的,你可以使用Tuple作为Map中的一个键。

例如:

val userMap = Map(
    (1, 25) -> "shankar", 
    (2, 35) -> "ramesh") 

这时可以尝试打印使用foreach

val userMapRDD = sparkContext.parallelize(userMap.toSeq, 2) 
    mapRDD.foreach(element => { 
    println(element) 
    }) 

如果你想在mapRDD转换为其他输出。以下代码仅返回年龄和名称作为元组。

val mappedRDD = userMapRDD.map { 
    case ((empId: Int, age: Int), name: String) => { 
     (age, name) 
    } 
    } 
+1

甚至'地图(1 - > 25 - > “香卡”,2 - > 35 - > “拉梅什”)' – Yawar

+0

@Yawar:我喜欢你如何创建的地图的方式.. +1 – Shankar

+0

我相信你应该使用'.collect.foreach(println)'打印RDD:http://spark.apache.org/docs/latest/programming-guide.html#printing-elements-of-an-rdd – dk14

相关问题