Python 将parquet文件转换为csv文件

Python 将parquet文件转换为csv文件

  • 使用pyarrow插件将parquet文件转换为csv

使用pyarrow插件将parquet文件转换为csv


```python
import os
import pyarrow.parquet as pq
from concurrent.futures import ThreadPoolExecutor
import csv
import time

# 定义一个函数来处理单个 Parquet 文件
def process_parquet_file(parquet_file, csv_file):
    try:
        start_time = time.time()  # 记录开始时间

        # 打开 CSV 文件,使用追加模式
        # csv_file_handle = open(csv_file, 'a', newline='')
        csv_file_handle = open(csv_file, 'a', newline='', encoding='utf-8')

        # 获取 Parquet 文件的字段名
        parquet_data = pq.ParquetFile(parquet_file)
        field_names = parquet_data.schema.names

        # 写入 CSV 文件的标题行(只在文件创建时写入一次)
        if os.path.getsize(csv_file) == 0:
            csv_writer = csv.writer(csv_file_handle)
            csv_writer.writerow(field_names)

        # 逐块读取 Parquet 数据并写入 CSV 文件
        for i in range(parquet_data.num_row_groups):
            row_group = parquet_data.read_row_group(i)
            df = row_group.to_pandas()
            # 过滤特殊字符或替换为合适的占位符
            df = df.apply(lambda x: x.replace('\ue108', '') if isinstance(x, str) else x)
            df.to_csv(csv_file_handle, mode='a', header=False, index=False)

        # 关闭文件句柄
        csv_file_handle.close()

        end_time = time.time()  # 记录结束时间
        elapsed_time = end_time - start_time
        print(f"{parquet_file} 处理完毕,用时 {elapsed_time:.2f} 秒")
    except Exception as e:
        print(f"处理 {parquet_file} 时出现错误: {str(e)}")
    finally:
        print(f"{parquet_file} 处理完毕,用时 {elapsed_time:.2f} 秒")

if __name__ == "__main__":
    datadir = './'  # 包含 Parquet 文件的文件夹
    parquet_files = [os.path.join(datadir, f) for f in os.listdir(datadir) if f.endswith('.parquet')]

    # 创建线程池并行处理 Parquet 文件
    with ThreadPoolExecutor(max_workers=4) as executor:
        for parquet_file in parquet_files:
            # 生成输出 CSV 文件名(根据 Parquet 文件名)
            csv_file = os.path.splitext(parquet_file)[0] + '.csv'

            # 使用线程池处理 Parquet 文件
            executor.submit(process_parquet_file, parquet_file, csv_file)

    print("所有文件处理完毕")

注意parquet文件存放路径。

你可能感兴趣的:(#,python常用功能方法,python,开发语言)