【问题标题】:Read specific column from Parquet without using Spark不使用 Spark 从 Parquet 读取特定列
【发布时间】:2017-03-05 20:11:17
【问题描述】:

我正在尝试在不使用 Apache 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))
}
}

注释掉的案例类代表我的文件的架构,现在写上面的代码从文件中读取所有列。我想阅读特定的专栏。

【问题讨论】:

    标签: scala parquet


    【解决方案1】:

    如果您只想读取特定列,则需要在 ParquetReader 构建器接受的配置上设置读取模式。 (这也称为投影)。

    在您的情况下,您应该能够在 AvroParquetReader 构建器类上调用 .withConf(conf),并在您传入的 conf 中调用 conf.set(ReadSupport.PARQUET_READ_SCHEMA, schema),其中 schema 是字符串形式的 avro 模式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 2020-10-28
      • 2020-05-17
      • 2017-01-16
      • 2020-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多