在熊猫中读取字符串到csv时速度会有所不同

时间:2019-11-08 01:37:38

标签: python-3.x pandas amazon-web-services amazon-s3 amazon-ec2

我们正在使用SFTP将文件从本地导入EC2,然后最终将其上传到S3数据仓库。

这些文件是纯文本文件,并且是在数据湖中的后输入操作,我们正在使用python3大熊猫创建相同的结构化数据框(一些用于数据整理的业务逻辑)。

该代码是使用Windows计算机上本地存在的测试文件在本地开发和测试的,通常需要几秒钟才能完成转换。但是,当相同的代码转换到EC2并从S3读取SFTP的文件时,它开始需要花费很多时间。

在EC2上以调试模式(py-console)运行代码之后,我们能够找到导致速度慢的命令,因此我们尝试了以下不同的方案。

本地或EC2本地

file = open('/path/to/file/abc.out', 'r')

for line in file:
    ##############
    BUSINESS LOGIC
    ##############

FOR S3

s3 = boto3.resource('s3')
obj = s3.Object(bucket_name, key)
body = obj.get()['Body']
for line in body.read().decode('utf-8').split('\n'):
    ##############
    BUSINESS LOGIC
    ##############

对于每种情况,文件(在所有业务逻辑处理之后)已成功读取到字符串中(在一秒钟之内)。但是,当我们尝试创建字符串的数据帧时,它具有以下行为:

formatted_data = BUSINESS LOGIC

final_data = StringIO(formatted_data)

# reading data into a dataframe
df = pd.read_csv(final_data, sep='|')

场景分析

| FILE LOCATION                                     | PROCESSING | TIME TO EXECUTE |
------------------------------------------------------------------------------------
| WINDOWS LOCAL                                     | LOCAL      | SECONDS         |
| COPY LOCAL TO S3                                  | EC2        | SECONDS         |
| DOS2UNIX ON LOCAL & COPY TO S3                    | EC2        | HOURS           |
| UNIX2DOS ON LOCAL & COPY TO S3                    | EC2        | SECONDS         |
| SFTP TO EC2                                       | EC2        | SECONDS         |
| SFTP TO EC2 & COPY TO S3                          | EC2        | HOURS           |
| SFTP TO EC2 & COPY TO S3 & RE-COPY FROM S3 TO EC2 | EC2        | SECONDS         |

根据分析,我们认为可能是S3上的unix文件编码引起了问题。但是下载到EC2时使用相同的文件就可以了。此外,我们在 for语句中从S3读取时进行解码。有什么见解可能是什么原因?预先谢谢你!

0 个答案:

没有答案