Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spark scala flatmapvalues_Scala_Apache Spark - Fatal编程技术网

Spark scala flatmapvalues

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,

在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,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")
}