2017-03-05 27 views
1

我正在嘗試閱讀Parquet文件而不使用Apache Spark,我能夠做到這一點,但我發現很難閱讀特定的列。我無法找到任何Google的優質資源,因爲幾乎所有的帖子都是關於閱讀使用的鑲木地板文件。下面是我的代碼:閱讀來自實木複合材料的特定列而不使用Spark

import org.apache.hadoop.fs.{FileSystem, Path} 
import org.apache.avro.generic.GenericRecord 
import org.apache.parquet.hadoop.ParquetReader 
import org.apache.parquet.avro.AvroParquetReader 

object parquetToJson{ 
    def main (args : Array[String]):Unit= { 
//case class Customer(key: Int, name: String, sellAmount: Double, profit: Double, state:String) 
val parquetFilePath = new Path("data/parquet/Customer/") 
val reader = AvroParquetReader.builder[GenericRecord](parquetFilePath).build()//.asInstanceOf[ParquetReader[GenericRecord]] 
val iter = Iterator.continually(reader.read).takeWhile(_ != null) 
val list = iter.toList 
list.foreach(record => println(record)) 
} 
} 

註釋掉案例類代表我的文件的模式,並寫信上面的代碼從文件中讀取的所有列。我想閱讀特定的列。

回答

0

如果您只想讀取特定列,則需要在ParquetReader構建器接受的配置上設置讀取模式。 (這也被稱爲投影)。

在你的情況,你應該能夠調用.withConf(conf)AvroParquetReader生成器類,並在您通過在conf,調用conf.set(ReadSupport.PARQUET_READ_SCHEMA, schema)其中schema是一個字符串形式的Avro架構。