我使用下面的代碼來獲取Apache Spark中文件的名稱,但是當我將它附加到RDD[string]
中時,我獲得了不同的價值。火花scala中的文件名顯示錯誤的結果
下面是我的代碼:
import org.apache.spark.rdd.RDD
val text: RDD[String] = sc.textFile("/user/cloudera/File8.HL7").coalesce(1)
var obrInd = 0
val filenme: RDD[String] = sc.wholeTextFiles("/user/cloudera/File8.HL7").map { case (filename, content) => filename}
var nameoffile = filenme.map(_.split("/").takeRight(1).mkString("|"))
nameoffile.collect().foreach(println)
val result: RDD[String] = text.mapPartitions{part =>
part.map{r =>
if(code == "OBR")
r + "|OBR_"+ nameoffile
}
}
result.collect().foreach(println)
下面是我的輸出
OBR|1||OBR_MapPartitionsRDD[110] at
OBX|1||OBR_MapPartitionsRDD[110] at
OBX|2||OBR_MapPartitionsRDD[110] at
OBX|3||OBR_MapPartitionsRDD[110] at
OBX|4||OBR_MapPartitionsRDD[110] at
預期輸出:
OBR|1||OBR_File8.HL7
OBX|1||OBR_File8.HL7
OBX|2||OBR_File8.HL7
OBX|3||OBR_File8.HL7
OBX|4||OBR_File8.HL7
但
輸出scala> nameoffile.collect().foreach(println)
是
File8.HL7
我不知道我缺少什麼。
我不明白'_.split( 「/」)takeRight(1)。 mkString( 「|」)'。 'takeRight(1)'總是返回一個包含單個元素的集合,爲什麼要使用'mkString'?如果你的意圖是採取最後的元素,並製作一個字符串,我會'_.split(「/」)。last.toString' –
@ evan058我試過你的方式'_.split(「/」)。 last.toString'但仍然得到相同的結果。 – animal
這是一個普遍的建議,它不應該改變結果 –