【问题标题】:Do I need to check integrity use pandas to upload and download file from s3?我是否需要检查完整性使用 pandas 从 s3 上传和下载文件?
【发布时间】:2020-09-04 13:35:12
【问题描述】:

我使用pandas从s3上传下载文件,样式如下(pandas在后台使用s3fs)

import pandas as pd
pd.read_csv("s3://bucket/path/to/file.csv")

如果文件很大,通常是担心下载(或上传)不完整,处理了部分文件。

我需要在这里执行一些 md5 检查以确保数据的完整性吗?还是已经被s3fs处理了?

【问题讨论】:

    标签: pandas amazon-s3 python-s3fs


    【解决方案1】:

    简而言之,是的。通常,当人们将大量数据上传到外部存储桶时,他们会提供带有数据的 md5sum,但不幸的是,情况并非总是如此。如果不验证 md5sum,您将无法知道数据是否已从存储桶更改到您的本地计算机。 s3fs有一个校验和方法,我写了一个小自定义函数来获取一个字符串的md5,这样你就可以在s3中验证文件对象的md5,然后在你本地读取它之后计算md5,如下所示:

    import pandas as pd
    import io
    from hashlib import md5
    from s3fs import S3FileSystem
    
    fs = S3FileSystem(anon=False)
    checksum = fs.checksum('s3://fun_bucket/check_df.csv')
    print("S3FS checksum is: %i" %checksum)
    
    def tokenize(mystr):
        new_str = ""
        for c in mystr.decode():
            new_str += c
        return md5(str(new_str).encode()).hexdigest()
    
    
    with fs.open('s3://sjcb/check_df.csv') as f:
        data = f.read()
        hash_checksum = int(tokenize(data), 16)
        print("Read data checksum is: %i" %hash_checksum)
        if checksum == hash_checksum:
            df = pd.read_csv(io.BytesIO(data), encoding='utf8')
    
    print(df)
    

    当我运行它时,我得到:

    S3FS checksum is: 185552205801727997486039422858559195205
    Read data checksum is: 185552205801727997486039422858559195205
       one  two  three
    0    1    2      3
    1    1    2      3
    2    1    2      3
    

    这会打印校验和供您手动检查,但显然如果它们不相等,条件将不会生成 df。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2014-03-24
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2021-05-23
      相关资源
      最近更新 更多