Apache spark Avro、Kryo和拼花地板的火花

Apache spark Avro、Kryo和拼花地板的火花,apache-spark,kryo,parquet,Apache Spark,Kryo,Parquet,我很难理解Avro、Kryo和Parquet在Spark的背景下到底做了什么。它们都与序列化相关,但我见过它们一起使用,所以它们不能做相同的事情 Parquet将其自身描述为一种柱状存储格式,我有点明白,但当我保存一个Parquet文件时,Arvo或Kryo能与之有任何关系吗?或者它们仅在spark作业期间相关,即在洗牌或溢出到磁盘期间通过网络发送对象?Arvo和Kryo有什么不同?当你一起使用它们时会发生什么?这篇非常好的博客文章解释了除了Kryo之外的所有细节 Kryo将用于不涉及永久存储

我很难理解Avro、Kryo和Parquet在Spark的背景下到底做了什么。它们都与序列化相关,但我见过它们一起使用,所以它们不能做相同的事情


Parquet将其自身描述为一种柱状存储格式,我有点明白,但当我保存一个Parquet文件时,Arvo或Kryo能与之有任何关系吗?或者它们仅在spark作业期间相关,即在洗牌或溢出到磁盘期间通过网络发送对象?Arvo和Kryo有什么不同?当你一起使用它们时会发生什么?

这篇非常好的博客文章解释了除了Kryo之外的所有细节


Kryo将用于不涉及永久存储的快速序列化,如随机数据和缓存数据,作为临时文件存储在内存或磁盘上。

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

拼花地板的另一个限制是它本质上是一次写入格式。因此,通常您需要在某个临时区域收集数据,并每天将其写入拼花地板文件一次(例如)

这是您可能想要使用AVRO的地方。例如,您可以收集卡夫卡主题或本地文件中的AVRO编码记录,并在一天结束时进行批处理作业,将所有记录转换为拼花文件。这是相当容易实现感谢拼花avro库,它提供了工具之间的自动转换avro和拼花格式


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

因此,如果拼花地板用于高效永久存储,而Kryo用于快速非永久存储,那么Arvo会做什么?我什么时候会使用它?Kryo-非常快,非常紧凑,但它只在JVM上工作,它将把我们的基础设施限制在JVM应用程序上。也许一些疯狂的NodeJS开发者也会喜欢阅读我们的活动??