大家好,我在这里会遇到很多类似的问题,但是我有一个可以正确执行的代码,该代码返回了5条记录,而我的查询是我应该如何只读取整个文件,并最后返回只需要姿势的欲望行我有csv文件,其大小在gb中,所以我不想返回整个gb文件数据以仅获取5条记录,所以请告诉我我应该如何获取它。...如果可能的话,请解释我的代码好,为什么不好。 代码:
import boto3
from botocore.client import Config
import pandas as pd
ACCESS_KEY_ID = 'something'
ACCESS_SECRET_KEY = 'something'
BUCKET_NAME = 'something'
Filename='dataRepository/source/MergedSeedData(Parts_skills_Durations).csv'
client = boto3.client("s3",
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY)
obj = client.get_object(Bucket=BUCKET_NAME, Key=Filename)
Data = pd.read_csv(obj['Body'])
# data1 = Data.columns
# return data1
Data=Data.head(5)
print(Data)
这我的代码运行良好,也可以从s3存储桶中获取5条记录,但是我已经解释了我正在寻找的任何其他查询,可以随时给我发短信... thnxx
答案 0 :(得分:2)
您可以使用reading a file in chunks的pandas功能,仅加载所需的数据。
Data_iter = pd.read_csv(obj['Body'], chunksize = 5)
Data = Data_iter.get_chunk()
print(Data)
答案 1 :(得分:1)
您可以使用HTTP Range:
标头(see RFC 2616),该标头使用字节范围参数。 S3 API对此有规定,这将帮助您不读取/下载整个S3文件。
示例代码:
import boto3
obj = boto3.resource('s3').Object('bucket101', 'my.csv')
record_stream = obj.get(Range='bytes=0-1000')['Body']
print(record_stream.read())
这将仅返回标题中提供的byte_range_data。
但是您将需要修改它以将字符串转换为Dataframe
。也许read + join
代表来自\t
文件的字符串中的\n
和.csv