我正在研究一個Spark應用程序,它必須從S3 Bucket和HDFS讀取多個目錄(即多個路徑)。我讀了新的HadoopAPI提供了一種很好的方式來以一種很好的表現方式讀取Lzo壓縮/索引文件。但是,如何在RDD中使用newHadoopAPI讀取多個文件夾路徑/目錄中的多個Lzo文件和索引文件?newHadoopAPI中的多個輸入路徑以供火花讀取Lzo文件
該文件夾結構就像兩列分區的Hive表。例如:如下。日期和批次分區
/rootDirectory/date=20161002/batch=5678/001_0.lzo /rootDirectory/date=20161002/batch=5678/001_0.lzo.index /rootDirectory /日期= 20161002/batch = 5678/002_0.lzo /rootDirectory/date=20161002/batch=5678/002_0.lzo.index /rootDirectory/date=20161002/batch=8765/001_0.lzo /rootDirectory/date = 20161002/batch = 8765 /001_0.lzo.index /rootDirectory/date=20161002/batch=8765/002_0.lzo /rootDirectory/date=20161002/batch=8765/002_0.lzo.index
.....等等。
現在我使用下面的代碼從S3讀取數據。這將Lzo和Lzo.Index文件視爲輸入,這會導致我的應用程序崩潰,因爲我不想讀取.lzo.index文件,而只是使用索引速度的.lzo文件。
val impInput = sparkSession.sparkContext.newAPIHadoopFile("s3://my-bucket/myfolder/*/*", classOf[NonSplittableTextInputFormat],classOf[org.apache.hadoop.io.LongWritable],classOf[org.apache.hadoop.io.Text])
val impRDD = impInput.map(_._2.toString)
任何人都可以請幫我理解我該怎麼做?
1)。使用newHadoopAPI讀取Lzo文件根目錄下的所有(多個)文件夾,以便我可以利用.index文件來實現我的優勢。 2)。以類似的方式從HDFS讀取數據。
試試這個https://mail-archives.apache.org/mod_mbox/spark-user/201312.mbox/%[email protected].com%3E –
謝謝@AyanGuha - 但這似乎不起作用。在這個例子中,有一個78GB(.lzo)的大文件,他正在使用它來讀取使用索引的文件。 在我的情況下,我有幾個小文件,似乎我沒有得到任何使用Lzo文件的好處,由於大量的小文件。層次結構如上所示。 對此有何想法? –