Spark scala flatmapvalues
在Spark shell中执行了一些转换之后,我得到了如下输出。我是从REPL复制和粘贴的 scala>s.collect res44:Array[(String,String)]=数组((45000,Pavan,Amit),(50000,Bhupesh,Tejas,Dinesh) 现在,我需要为每个ID生成单独的文件,文件名中包含ID,如下所示Spark scala flatmapvalues,scala,apache-spark,Scala,Apache Spark,在Spark shell中执行了一些转换之后,我得到了如下输出。我是从REPL复制和粘贴的 scala>s.collect res44:Array[(String,String)]=数组((45000,Pavan,Amit),(50000,Bhupesh,Tejas,Dinesh) 现在,我需要为每个ID生成单独的文件,文件名中包含ID,如下所示 The file with name ID45000.txt should have below content 45000,Pavan 45000,
The file with name ID45000.txt should have below content
45000,Pavan
45000,Amit
The file with name ID50000.txt should have below content.
50000,Bhupesh
50000,Tejas
50000,Dinesh
尝试了下面的代码,但不工作
s.foreach{case(k,v) => flatMapValues(x=>x.split(",")).saveAsTextFile("ID"+k+".txt")}
鉴于您的
s
rdd是
执行以下操作应该有效(但不是一个有效的解决方案)
val groupedRDD=s.flatMap{case(k,v)=>v.split(“,”).map(x=>(k,x))}.groupByKey()
val keySetToCheck=groupeddd.collect().toMap.keySet
对于(键x._1==key).saveAsTextFile(“ID”+key+“.txt”)
}
我希望答案是有帮助的非常感谢,Ramesh,我是stackoverflow新手,无法提前查看您的响应。我正在REPL中执行代码。在应用了一些转换后,我在REPL中获得了输出,我将其复制并粘贴为Array[(String,String)]=Array((45000,Pavan,Amit)。(50000,Bhupesh,Tejas,Dinesh))。我的下一步是为每个ID生成单独的文件,其中包含ID和名称列,文件名应该包含ID。45000、Pavan 45000、ID45000.txt文件中的Amit和ID50000.txt文件中的50000、Bhupesh 50000、Tejas 50000、Dinesh。非常感谢。如果我不清楚,请向Ramesh道歉。根据我的理解,在数组中[(字符串,字符串)],id被视为一个字符串,所有名称被视为另一个字符串。下面我已回答:)非常感谢Ramesh提供的友好解决方案。如果不使用collect(),这可能吗?不可能。但是您只能收集密钥,而不是收集所有数据。
Array[(String, String)] = Array((45000,Pavan,Amit), (50000,Bhupesh,Tejas,Dinesh)
val groupedRDD = s.flatMap{case(k, v)=> v.split(",").map(x => (k, x))}.groupByKey()
val keySetToCheck = groupedRDD.collect().toMap.keySet
for(key <- keySetToCheck){
groupedRDD.filter(x => x._1 == key).saveAsTextFile("ID"+key+".txt")
}