我需要检查完整性使用 pandas 从 s3 上传和下载文件吗?
Do I need to check integrity use pandas to upload and download file from s3?
我使用 pandas 按照以下样式从 s3 上传和下载文件(pandas 在后台使用 s3fs)
import pandas as pd
pd.read_csv("s3://bucket/path/to/file.csv")
如果文件很大,通常会担心下载(或上传)不完整,处理了部分文件。
我需要在这里实现一些md5检查来确保数据的完整性吗?或者它已经被 s3fs 处理了?
简而言之,是的。通常,当人们将大量数据上传到外部存储桶时,他们会为数据提供一个 md5sum,但不幸的是,情况并非总是如此。在不验证 md5sum 的情况下,您无法知道数据是否已从存储桶更改到您的本地计算机。 s3fs有一个checksum方法,我写了一个小的自定义函数来获取一个字符串的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。
我使用 pandas 按照以下样式从 s3 上传和下载文件(pandas 在后台使用 s3fs)
import pandas as pd
pd.read_csv("s3://bucket/path/to/file.csv")
如果文件很大,通常会担心下载(或上传)不完整,处理了部分文件。
我需要在这里实现一些md5检查来确保数据的完整性吗?或者它已经被 s3fs 处理了?
简而言之,是的。通常,当人们将大量数据上传到外部存储桶时,他们会为数据提供一个 md5sum,但不幸的是,情况并非总是如此。在不验证 md5sum 的情况下,您无法知道数据是否已从存储桶更改到您的本地计算机。 s3fs有一个checksum方法,我写了一个小的自定义函数来获取一个字符串的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。