首页 > 解决方案 > 使用 Python 在 S3 中将 CSV 转换为 Parquet

问题描述

我需要将 CSV 文件转换为 S3 路径中的 Parquet 文件。我正在尝试使用下面的代码,但没有发生错误,代码执行成功并且不转换 CSV 文件

import pandas as pd
import boto3
import pyarrow as pa
import pyarrow.parquet as pq

s3 = boto3.client("s3", region_name='us-east-2', aws_access_key_id='my key id',
                  aws_secret_access_key='my secret key')

obj = s3.get_object(Bucket='my bucket', Key='test.csv')
df = pd.read_csv(obj['Body'])
table = pa.Table.from_pandas(df)
pq.write_to_dataset(table=table, root_path="test.parquet")

标签: pythonamazon-web-servicescsvamazon-s3parquet

解决方案


Python 中的 AWS CSV 到 Parquet 转换器

此脚本从 Amazon S3 获取文件并将其转换为 Parquet 版本以供以后的查询作业使用,然后将其上传回 Amazon S3。

import numpy 
import pandas 
import fastparquet

def lambda_handler(event,context):

    #identifying resource
    s3_object = boto3.client('s3', region_name='us-east-2')

    #access file

    get_file = s3_object.get_object(Bucket='ENTER_BUCKET_NAME_HERE', Key='CSV_FILE_NAME.csv')
    
    get = get_file['Body']

    df = pandas.DataFrame(get)

    #convert csv to parquet function
    def conv_csv_parquet_file(df):
    
        converted_data_parquet = df.to_parquet('converted_data_parquet_version.parquet')
    
    conv_csv_parquet_file(df)

    print("File converted from CSV to parquet completed")

    #uploading the parquet version file

    s3_path = "/converted_to_parquet/" + converted_data_parquet

    put_response = s3_resource.Object('ENTER_BUCKET_NAME_HERE',converted_data_parquet).put(Body=converted_data_parquet)

Python Library Boto3 允许 lambda 从 S3 获取 CSV 文件,然后 Fast-Parquet(或 Pyarrow)将 CSV 文件转换为 Parquet。

来自- https://github.com/ayshaysha/aws-csv-to-parquet-converter.py


推荐阅读