[英]Creating RDDs and outputting to text files with Scala and Spark
對於可能是一個簡單的問題,我深表歉意,但我正努力解決使用scala / spark解析rdd的問題。 我有一個從CSV創建的RDD,使用
val partitions: RDD[(String, String, String, String, String)] = withoutHeader.mapPartitions(lines => {
val parser = new CSVParser(',')
lines.map(line => {
val columns = parser.parseLine(line)
(columns(0), columns(1), columns(2), columns(3), columns(4))
})
})
當我將其輸出到文件時
partitions.saveAsTextFile(file)
我得到每行帶有括號的輸出。 我不要這些括號。 我通常很難理解這里發生的事情。 我的背景是使用低級語言,我一直在努力通過抽象來了解其實際功能。 我了解映射,但是輸出在逃避我。 有人可以向我解釋該行中發生的事情(columns(0), columns(1), columns(2), columns(3), columns(4))
還是可以向我指出一個簡單地解釋什么的指南發生了什么?
我的最終目標是能夠操縱hdsf上的spark文件以將其放入適合mllib的格式。spark或scala指南讓我印象深刻,因為它們看起來好像是由注釋不佳的javadocs制作的,不能真正解釋任何事情。
提前致謝。
院長
我只是將您的元組轉換為所需的字符串格式。 例如,創建|分隔的輸出:
partitions.map{ tup => s"${tup._1}|${tup._2}|${tup._3}|${tup._4}|${tup._5}" }
或使用模式匹配(這會帶來更多的運行時開銷):
partitions.map{ case (a,b,c,d,e) => s"$a|$b|$c|$d|$e" }
我正在使用Scala的字符串插值功能(請注意s"..."
格式)。
附帶說明,您可以通過僅映射整個RDD而不是單個分區來簡化示例:
val parser = new CSVParser(',')
val partitions: RDD[(String, String, String, String, String)] =
withoutHeader.map { line =>
val columns = parser.parseLine(line)
(columns(0), columns(1), columns(2), columns(3), columns(4))
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.