是否可以在不使用Apache Spark的情况下从Scala读取镶木地板文件?
我找到了一个允许我们使用普通scala读取和编写avro文件的项目。
https://github.com/sksamuel/avro4s
但是,如果不使用Spark,我无法使用普通的scala程序来查找和编写镶木地板文件吗?
答案 0 :(得分:13)
使用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 GenericRecord
,但如果您想将其转换为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
答案 1 :(得分:6)
还有一个名为eel的相对较新的项目,这是一个轻量级(非分布式处理)工具包,用于在小型项目中使用某些“大数据”技术。
答案 2 :(得分:1)
是的,您不必使用Spark来读/写Parquet。 只需直接从Scala代码中使用镶木地板库(那就是Spark正在做的事情):http://search.maven.org/#search%7Cga%7C1%7Cparquet