min*_*niQ 3 scala apache-spark
问题3:我想将scala映射转换为RDD,在以下情况下我该怎么做?我正在尝试这样做
var mapRDD = sc.parallelize(map.toList)
Run Code Online (Sandbox Code Playgroud)
这是正确的做法吗?
我没有包含整个代码,基本上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)
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用 Tuple 作为 Map 中的键。
例如:
val userMap = Map(
(1, 25) -> "shankar",
(2, 35) -> "ramesh")
Run Code Online (Sandbox Code Playgroud)
然后你可以尝试使用打印输出foreach
val userMapRDD = sparkContext.parallelize(userMap.toSeq, 2)
mapRDD.foreach(element => {
println(element)
})
Run Code Online (Sandbox Code Playgroud)
如果你想将mapRDD转换为其他东西。以下代码仅返回年龄和姓名作为元组。
val mappedRDD = userMapRDD.map {
case ((empId: Int, age: Int), name: String) => {
(age, name)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4774 次 |
| 最近记录: |