使用 pyarrow 与 pyspark 创建的 parquet 文件是否兼容?

2024-05-02

我必须分两步将 JSON 中的分析数据转换为 parquet。对于大量现有数据,我正在编写 PySpark 作业并执行

df.repartition(*partitionby).write.partitionBy(partitionby).
    mode("append").parquet(output,compression=codec)

但是对于增量数据,我计划使用 AWS Lambda。也许,PySpark 对此来说有点大材小用,因此我计划使用 PyArrow (我知道它不必要地涉及 Pandas,但我找不到更好的替代方案)。所以,基本上:

import pyarrow.parquet as pq
pq.write_table(table, outputPath, compression='snappy',
    use_deprecated_int96_timestamps=True)

我想知道 PySpark 和 PyArrow 编写的 Parquet 文件是否兼容(相对于 Athena)?


Parquet 文件编写者pyarrow(长名称:Apache Arrow)与 Apache Spark 兼容。但您必须小心写入 Parquet 文件中的数据类型,因为 Apache Arrow 比 Apache Spark 支持更广泛的数据类型。目前有一个标志flavor=spark in pyarrow您可以使用它自动设置一些兼容性选项,以便 Spark 可以再次读取这些文件。遗憾的是,在最新版本中,此选项还不够(预计会随着pyarrow==0.9.0)。您应该注意使用已弃用的 INT96 类型(use_deprecated_int96_timestamps=True)以及避免无符号整数列。对于无符号整数列,只需将它们转换为有符号整数即可。遗憾的是,如果您的 schema 中有无符号类型,而不是仅仅将它们加载为有符号类型(它们实际上总是以有符号形式存储,但仅用标记标记为无符号),那么 Spark 会出错。考虑到这两件事,这些文件应该在 Apache Spark 和 AWS Athena(这只是 Presto 的底层)中可读。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pyarrow 与 pyspark 创建的 parquet 文件是否兼容? 的相关文章

随机推荐