我有一个大小约为 60MB 的 test.parquet 文件。使用下面的脚本,我发现parquet文件的列压缩是GZIP。
import pyarrow.parquet as pq
parquet_file = pq.ParquetFile("C://Users/path/test.parquet")
print(parquet_file.metadata.row_group(0).column(0))
输出
<pyarrow._parquet.ColumnChunkMetaData object at 0x0000017E6AC9FBD8>
file_offset: 4
file_path:
physical_type: BYTE_ARRAY
num_values: 173664
path_in_schema: event-id
is_stats_set: True
statistics:
<pyarrow._parquet.Statistics object at 0x0000017E6AC9FE08>
has_min_max: True
min: 00004759-abeb-40fc-a9c6-1c79ab7c6726
max: ffffe406-0a2f-42d9-a882-784e3527102d
null_count: 0
distinct_count: 0
num_values: 173664
physical_type: BYTE_ARRAY
logical_type: String
converted_type (legacy): UTF8
compression: GZIP
encodings: ('PLAIN', 'BIT_PACKED')
has_dictionary_page: False
dictionary_page_offset: None
data_page_offset: 4
total_compressed_size: 3796510
total_uncompressed_size: 6947287
我想在处理前解压缩这个镶木地板文件。使用 python 如何解压缩这个具有 GZIP 压缩的镶木地板文件?
答案 0 :(得分:3)
压缩可能因 parquet 中的列而异,因此您不能确定它是否全部压缩为 gzip,仅此列。一般来说,pyarrow parquet reader 会透明地为你处理解压;你可以这样做
pq.read_table('example.parquet')
或(对于熊猫数据框)
pq.read_table('example.parquet').to_pandas()
如果您想流式传输数据以避免将其全部读入内存,则较低级别的 pq.ParquetFile
文件接口很有用,但在这种情况下,您不会在继续之前解压缩整个文件。
答案 1 :(得分:0)
您可以使用 pyspark 来实现这一点。
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("ParquetReaderTesting").getOrCreate()
df = spark.read.parquet("data/") # Reads all parquet files in that directory and Spark takes care of uncompress
# the data
# df = spark.read.parquet("data/<Specific parquet file>")
df.show()
df.printSchema()