【问题标题】:Read Parquet files from Scala without using Spark不使用 Spark 从 Scala 读取 Parquet 文件
【发布时间】:2016-02-05 23:02:14
【问题描述】:

是否可以在不使用 Apache Spark 的情况下从 Scala 读取 parquet 文件?

我找到了一个项目,它允许我们使用普通的 scala 读写 avro 文件。

https://github.com/sksamuel/avro4s

但是,如果不使用 Spark,我找不到使用普通 scala 程序读取和写入 parquet 文件的方法?

【问题讨论】:

    标签: scala


    【解决方案1】:

    使用 parquet-mr 项目很简单,这是 Alexey Raga 在他的回答中提到的项目。

    一些示例代码

    val reader = AvroParquetReader.builder[GenericRecord](path).build().asInstanceOf[ParquetReader[GenericRecord]]
    // iter is of type Iterator[GenericRecord]
    val iter = Iterator.continually(reader.read).takeWhile(_ != null)
    // if you want a list then...
    val list = iter.toList
    

    这将为您返回一个标准的 Avro GenericRecords,但如果您想将其转换为 scala 案例类,那么您可以使用您在问题中链接到的我的 Avro4s 库来进行编组你。假设您使用的是 1.30 或更高版本:

    case class Bibble(name: String, location: String)
    val format = RecordFormat[Bibble]
    // then for a given record
    val bibble = format.from(record)
    

    显然,我们可以一步将其与原始迭代器结合起来:

    val reader = AvroParquetReader.builder[GenericRecord](path).build().asInstanceOf[ParquetReader[GenericRecord]]
    val format = RecordFormat[Bibble]
    // iter is now an Iterator[Bibble]
    val iter = Iterator.continually(reader.read).takeWhile(_ != null).map(format.from)
    // and list is now a List[Bibble]
    val list = iter.toList
    

    【讨论】:

    • 嗨@monkjack 感谢您的示例代码,它真的很有帮助。能否请您简要解释一下builder[GenericRecord](path).build()Iterator.continually(reader.read).takeWhile(_ != null).map(format.from) 我几个月前开始从事大数据工作,上述方法的文档对我来说真的很难理解。
    • 你能详细说明要导入什么吗?例如,代码开头的“路径”必须是实现“InputFile”的东西......这到底是什么以及我们应该如何实现它?
    • 本例中的路径是 hadoop 路径,因此您需要类路径中的 hadoop 库。
    • 似乎不适用于嵌套案例类。最近有人看到这个工作吗?
    【解决方案2】:

    还有一个名为eel 的相对较新的项目,这是一个轻量级(非分布式处理)工具包,用于在小型中使用一些“大数据”技术。

    【讨论】:

      【解决方案3】:

      是的,您不必使用 Spark 来读/写 Parquet。 只需直接从您的 Scala 代码中使用 parquet lib(这就是 Spark 正在做的事情):http://search.maven.org/#search%7Cga%7C1%7Cparquet

      【讨论】:

      • 你有任何关于如何使用 Parquet Lib 读取 parquet 文件的示例吗?我不能使用 parquet-mr 项目,因为它在我的公司中没有得到批准。
      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 2015-12-04
      • 2017-08-07
      • 2021-06-18
      • 1970-01-01
      • 2017-09-25
      • 2015-11-27
      相关资源
      最近更新 更多