Spark与Avro、Kryo和Parquet的集成

8
我很难理解在Spark的上下文中,Avro、Kryo和Parquet到底是做什么的。它们都与序列化有关,但我见过它们一起使用,所以它们不能做同样的事情。
Parquet自称为列式存储格式,我有点明白,但当我保存一个Parquet文件时,Arvo或Kryo是否会参与其中?或者它们只在Spark作业期间相关,例如在洗牌或溢出到磁盘期间通过网络发送对象?Arvo和Kryo有何不同,当你将它们一起使用时会发生什么?
2个回答

6

当您查询数据时,如果只需要读取少数列,则Parquet非常适用。但是,如果您的模式具有许多列(30+),并且在查询/作业中需要读取所有列,则基于记录的格式(如AVRO)将更快/更好。

Parquet的另一个限制是它本质上是一种只写格式。因此,通常需要在某个暂存区域中收集数据,并在一天结束时将其写入Parquet文件(例如)。

这就是您可能想使用AVRO的地方。例如,您可以在Kafka主题或本地文件中收集AVRO编码的记录,并拥有一个批处理作业,在一天结束时将它们全部转换为Parquet文件。这很容易实现,感谢parquet-avro库提供了自动在AVRO和Parquet格式之间转换的工具。

当然,您也可以在Spark/BigData之外使用AVRO。它是一种非常好的序列化格式,类似于Google Protobuf或Apache Thrift。


3

5
如果Parquet用于高效的永久性存储,Kryo用于快速的非永久性存储,那么Arvo是用来做什么的?我何时需要使用它? - Matthew Jones
Kryo - 非常快速、非常紧凑,但它只能在 JVM 上运行,这将限制我们的基础设施仅适用于 JVM 应用程序。也许一些疯狂的 NodeJS 开发者也想读取我们的事件? - Pradeep Surale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接