2017-03-05 8 views
1

Apache Sparkを使用せずにParquetファイルを読み込もうとしていますが、できますが、特定の列を読みにくいことがわかりました。ほとんどすべての投稿は、寄木細工のファイルを使用して読んでいるので、私はGoogleの良いリソースを見つけることができません。Sparkを使用せずにParquetの特定の列を読む

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ビルダーが受け入れる構成で読取りスキーマを設定する必要があります。 (これは投影とも呼ばれます)。あなたのケースでは

あなたはAvroParquetReaderビルダークラスに.withConf(conf)を呼び出すことができる、とschemaは、文字列形式でアブロスキーマがどこにあるあなたが合格のconfで、conf.set(ReadSupport.PARQUET_READ_SCHEMA, schema)を呼び出す必要があります。

関連する問題