apache-spark - Spark 与 Avro、Kryo 和 Parquet

标签 apache-spark kryo parquet

我正在努力理解 Avro、Kryo 和 Parquet 在 Spark 的上下文中究竟做了什么。它们都与序列化有关,但我已经看到它们一起使用,所以它们不能做同样的事情。

Parquet 将其自身描述为一种柱状存储格式,我有点明白这一点,但是当我保存 Parquet 文件时,Arvo 或 Kryo 与它有什么关系吗?或者它们仅在 Spark 工作期间相关,即。用于在随机播放或溢出到磁盘期间通过网络发送对象? Arvo 和 Kryo 有何不同?将它们一起使用会发生什么?

最佳答案

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

Parquet 的另一个限制是它本质上是一次写入格式。所以通常你需要在某个暂存区收集数据并每天将其写入一个 Parquet 文件(例如)。

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

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

关于apache-spark - Spark 与 Avro、Kryo 和 Parquet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30829961/

相关文章:

scala - 如何将 hiveContext 作为参数传递给函数 spark scala

python-3.x - 在 Colab.Research.Google 上使用 Python 从位于 Google 云端硬盘中的文件创建 Spark RDD

java - 序列化并不总是以序列化原始类型结束吗?

java - 使用 Kryo 的通用 Java 序列化/反序列化

hadoop - 单个 map 中的多种输出格式减少

hadoop - 在独立模式下编写 Parquet 文件是可行的..多工作模式失败

apache-spark - Spark中的treeReduce与reduceByKey

java - Apache Kafka-Log4j-Appender 不工作 Spark 集群模式

hadoop - 如何在 Spark 中使用 Kryo 注册 InternalRow

python - 如何在 python 中使用生成器循环大型 Parquet 文件?