我正在编写一个lambda来读取Parquet文件中存储的记录,将它们重组为partition_key: {json_record}
格式,并将记录提交到Kafka队列。我想知道是否有什么方法可以做到这一点,而不需要一次将整张表读入内存。
我已经尝试使用fastparquet
库中的iter_row_groups
方法,但我的记录只有一个行组,所以我仍在将整个表加载到内存中。我注意到pyarrow
中的BufferReader
有一个readlines
方法,但它没有实现。真的不可能逐行阅读Parquet吗?
可能值得指出的是,我正在使用存储在S3中的Parquet文件,因此理想情况下,解决方案能够在StreamingBody
中读取
我建议您可以查看DuckDB和polars:
- DuckDBhttps://duckdb.org/2021/06/25/querying-parquet.html
当然可以将查询限制为前1000个结果。如果您使用duckdb和SELECT WHERE在整个镶木地板上迭代一些行索引,那么应该很容易。
- 极坐标https://pola-rs.github.io/polars/py-polars/html/reference/api/polars.scan_parquet.html
您可以试用row_count_name和row_count_offset。同样,使用现有的行索引列将行作为块读取是可行的。