【问题标题】:Python/PySpark - Upload large pandas dataframe > 5GB to s3Python/PySpark - 将大于 5GB 的大熊猫数据框上传到 s3
【发布时间】:2022-12-10 21:24:45
【问题描述】:

我需要一些关于如何使用 python 将包含 csv 数据的大于 5GB 的大型数据帧上传到 s3 的输入。

我正在运行一项胶水作业 (PYSPARK),它将多个 csv 文件连接到一个 csv 中,并将连接后的 csv 上传到 s3

我收到错误“botocore.exceptions.ClientError:调用 UploadPart 操作时发生错误(EntityTooLarge):您建议的上传超出最大允许大小”

以下是我正在尝试做的事情:

dataframe = pandas.read_csv(obj["Body"], delimiter=",", keep_default_na=False, low_memory=False, dtype=str)
dataframe.to_csv(buffer_value, sep=",", index=False)
payload = buffer_value.getvalue()

client_kwargs = {'S3.Client.create_multipart_upload': {'ServerSideEncryption': 'aws:kms', 'SSEKMSKeyId': kms_key}, 'S3.Client.put_object': {'ServerSideEncryption': 'aws:kms', 'SSEKMSKeyId': kms_key}}

with smart_open.open(url, 'w', transport_params={'client_kwargs': client_kwargs, 'client': s3_client}) as payload_write:
    payload_write.write(payload)

【问题讨论】:

  • 查看boto3的upload_file方法?

标签: python dataframe amazon-s3 pyspark aws-glue


【解决方案1】:

这段代码对我有用。关键是将有效负载转换为 BytesIO。

            buffer = BytesIO(payload.getvalue().encode())
            s3_client.upload_fileobj(
                buffer, 
                bucket,
                file_name,
                ExtraArgs={"ServerSideEncryption": "aws:kms", "SSEKMSKeyId": kms_key})

【讨论】:

    猜你喜欢
    • 2012-07-31
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2019-07-08
    • 2013-06-23
    • 2019-08-05
    相关资源
    最近更新 更多