我必须分两步将JSON中的分析数据转换为镶木地板。对于大量现有数据,我正在编写PySpark作业并执行
/mcq_q[0-9]+$/
但是对于增量数据,我计划使用AWS Lambda。也许,PySpark对它来说太过分了,因此我打算使用PyArrow(我知道它不必要地涉及Pandas,但我找不到更好的选择)。所以,基本上:
df.repartition(*partitionby).write.partitionBy(partitionby).
mode("append").parquet(output,compression=codec)
我想知道PySpark和PyArrow编写的Parquet文件是否兼容(相对于Athena)?
答案 0 :(得分:4)
由pyarrow
(长名称:Apache Arrow)编写的Parquet文件与Apache Spark兼容。但是你必须要小心你在Parquet文件中写入哪些数据类型,因为Apache Arrow支持更广泛的数据类型,然后是Apache Spark。 flavor=spark
中当前有一个标记pyarrow
,您可以使用该标记自动设置一些兼容性选项,以便Spark可以再次读取这些文件。遗憾的是,在最新版本中,此选项还不够(期望随pyarrow==0.9.0
更改)。您应该注意使用不推荐的INT96类型(use_deprecated_int96_timestamps=True
)写出时间戳,以及避免使用无符号整数列。对于无符号整数列,只需将它们转换为有符号整数。遗憾的是,如果你的模式中有一个无符号类型而不是仅仅将它们作为有符号加载,那么Spark就会出错(它们实际上总是存储为已签名,但只标记为无符号标记)。尊重这两件事,文件应该在Apache Spark和AWS Athena中可读(这只是引擎盖下的Presto)。