python - 使用 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")
解决方案
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
推荐阅读
- swift - 如何从 Pod 框架中删除 UIWebView?
- mysql - 您如何使用 discord.js mysql 检查该 ID 的数据是否已存在
- java - Java根据交付ID在国际交付列表中升序排序
- c++ - C ++从字符串制作特定的字符
- ios - 如何确定 iOS 设备的视频播放能力?
- awk - sed 或 awk:替换为先前出现的计数
- apache-kafka - 我可以在 Kafka Stream Topology 中多次使用主题吗?
- javascript - v-for 循环不适用于数组项
- objective-c - 如何控制 DataElement 中 SegmentedControl 的外观
- javascript - Angular 9 + Firebase。更新数据库中的属性