我可以使用以下命令下载单个 snappy.parquet 分区文件:
aws s3 cp s3://bucket/my-data.parquet/my-data-0000.snappy.parquet ./my-data-0000.snappy.parquet
然后使用:
parquet-tools head my-data-0000.snappy.parquet
parquet-tools schema my-data-0000.snappy.parquet
parquet-tools meta my-data-0000.snappy.parquet
但我不想下载该文件,也不想指定特定的 snappy.parquet 文件。相反,前缀:“s3://bucket/my-data.parquet”
如果不同分区文件的不同行组中的架构不同怎么办?
按照说明这里我下载了一个jar文件并运行了
hadoop jar parquet-tools-1.9.0.jar schema s3://bucket/my-data.parquet/
但这导致了错误:没有架构“s3”的文件系统。
这个 answer 看起来很有希望,但仅适用于从 HDFS 读取。 S3有什么解决方案吗?
我编写了工具 clidb 来帮助完成这种“快速查看 S3 中的 parquet 文件”任务。
你应该能够做到:
pip install "clidb[extras]"
clidb s3://bucket/
然后单击将镶木地板文件加载为视图以检查和运行 SQL。
您可以使用此 aws cli 命令,它适用于大于 128 MB 的文件,而不是 AWS 控制台中的 S3 Select。 不过,您需要直接指定文件。对于行组中的不同模式,您将需要一个更强大的解决方案,但对我来说,这超出了“快速浏览”的范围。
aws s3api select-object-content \
--bucket bucket \
--key "my-data.parquet/my-data-0000.snappy.parquet" \
--expression "select * from s3object limit 100" \
--expression-type 'SQL' \
--input-serialization '{"Parquet": {}, "CompressionType": "NONE"}' \
--output-serialization '{"JSON": {}}' "output.json"
该命令将使用输出创建
output.json
文件。
我找到了这个 pip 可安装的 parquet-tools,它为您提供有关 S3 上的 parquet 文件的信息。唯一的先决条件是您应该有权访问 S3 上的文件。
parquet-tools inspect s3://path/to/file.parquet