0
我正在嘗試使用Spark RDD做一些文本處理。Spark - 如何正確處理RDD.map()方法中的錯誤情況?
輸入文件的格式是:
2015-05-20T18:30 <some_url>/?<key1>=<value1>&<key2>=<value2>&...&<keyn>=<valuen>
我想提取文本中的某些字段,並將其轉換成CSV格式,如:
<value1>,<value5>,<valuek>,<valuen>
下面的代碼是我該怎麼辦這個:
val lines = sc.textFile(s"s3n://${MY_BUCKET}/${MY_FOLDER}/test/*.gz")
val records = lines.map { line =>
val mp = line.split("&")
.map(_.split("="))
.filter(_.length >= 2)
.map(t => (t(0), t(1))).toMap
(mp.get("key1"), mp.get("key5"), mp.get("keyk"), mp.get("keyn"))
}
我想知道,如果輸入文本的某一行是錯誤的格式或我無效,則map()
函數無法返回有效值。這在文本處理中很常見,處理這個問題的最佳做法是什麼?
對不起,你爲什麼要重新映射一試變成一個嗎?這種情況下的語義完全一樣。 –