sib*_*ane 1 python parquet aws-lambda amazon-athena pyarrow
我必须分两个步骤将JSON中的分析数据转换为实木复合地板。对于大量现有数据,我正在编写一个PySpark作业,并且正在做
df.repartition(*partitionby).write.partitionBy(partitionby).
mode("append").parquet(output,compression=codec)
Run Code Online (Sandbox Code Playgroud)
但是,对于增量数据,我计划使用AWS Lambda。PySpark可能对它来说是一个过大的杀伤力,因此我打算为此使用PyArrow(我知道它不必要地涉及到Pandas,但我找不到更好的替代方法)。因此,基本上:
import pyarrow.parquet as pq
pq.write_table(table, outputPath, compression='snappy',
use_deprecated_int96_timestamps=True)
Run Code Online (Sandbox Code Playgroud)
我想知道由PySpark和PyArrow编写的Parquet文件是否兼容(相对于Athena)?
由pyarrow
(长名:Apache Arrow)编写的Parquet文件与Apache Spark兼容。但是您必须小心,将哪些数据类型写入Parquet文件中,因为Apache Arrow支持的数据类型比Apache Spark支持的数据类型更大。目前一个标志flavor=spark
中pyarrow
,你可以用它来自动设置一些兼容性的选项,使星火可以再次读取这些文件。遗憾的是,在最新版本中,此选项是不够的(期望通过进行更改pyarrow==0.9.0
)。您应该注意使用不推荐使用的INT96类型写时间戳(use_deprecated_int96_timestamps=True
),并避免使用无符号整数列。对于无符号整数列,将其简单地转换为有符号整数。遗憾的是,如果您的架构中有未签名的类型,而不是只是将它们加载为已签名,Spark会报出错误(它们实际上始终存储为已签名,但仅用标记标记为未签名)。尊重这两件事,这些文件应该在Apache Spark和AWS Athena(仅是Presto内幕)中可读。
归档时间: |
|
查看次数: |
1443 次 |
最近记录: |