【发布时间】:2016-02-05 23:02:14
【问题描述】:
是否可以在不使用 Apache Spark 的情况下从 Scala 读取 parquet 文件?
我找到了一个项目,它允许我们使用普通的 scala 读写 avro 文件。
https://github.com/sksamuel/avro4s
但是,如果不使用 Spark,我找不到使用普通 scala 程序读取和写入 parquet 文件的方法?
【问题讨论】:
标签: scala
是否可以在不使用 Apache Spark 的情况下从 Scala 读取 parquet 文件?
我找到了一个项目,它允许我们使用普通的 scala 读写 avro 文件。
https://github.com/sksamuel/avro4s
但是,如果不使用 Spark,我找不到使用普通 scala 程序读取和写入 parquet 文件的方法?
【问题讨论】:
标签: scala
使用 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
【讨论】:
builder[GenericRecord](path).build() 和Iterator.continually(reader.read).takeWhile(_ != null).map(format.from) 我几个月前开始从事大数据工作,上述方法的文档对我来说真的很难理解。
还有一个名为eel 的相对较新的项目,这是一个轻量级(非分布式处理)工具包,用于在小型中使用一些“大数据”技术。
【讨论】:
是的,您不必使用 Spark 来读/写 Parquet。 只需直接从您的 Scala 代码中使用 parquet lib(这就是 Spark 正在做的事情):http://search.maven.org/#search%7Cga%7C1%7Cparquet
【讨论】: