如何解压缩镶木地板文件?

时间:2021-07-02 14:08:41

标签: python apache-spark pyspark gzip parquet

我有一个大小约为 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 压缩的镶木地板文件?

2 个答案:

答案 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()
相关问题