簡體   English   中英

使用Scala和Spark創建RDD並輸出到文本文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM