2017-03-05 1 views
1

J'essaie de lire les fichiers de Parquet sans utiliser Apache Spark et je suis capable de le faire mais j'ai du mal à lire des colonnes spécifiques. Je ne suis pas en mesure de trouver une bonne ressource de Google car presque tout le post est sur la lecture du fichier parquet en utilisant. Ci-dessous mon code:Lire la colonne spécifique de Parquet sans utiliser 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)) 
} 
} 

Le commenté classe de cas représente le schéma de mon fichier et écrire maintenant le code ci-dessus lit toutes les colonnes du fichier. Je veux lire des colonnes spécifiques.

Répondre

0

Si vous souhaitez simplement lire des colonnes spécifiques, vous devez définir un schéma de lecture sur la configuration acceptée par le générateur ParquetReader. (Ceci est également connu comme une projection).

Dans votre cas, vous devriez être en mesure d'appeler .withConf(conf) sur la classe constructeur AvroParquetReader, et dans le passé dans conf, appelez conf.set(ReadSupport.PARQUET_READ_SCHEMA, schema)schema est un schéma Avro sous forme String.