簡體   English   中英

如何從s3存儲桶中僅讀取5條記錄並在不獲取csv文件的所有數據的情況下返回它

[英]How to read only 5 records from s3 bucket and return it without getting all data of csv file

大家好,我知道很多類似的問題,我會在這里找到,但我有一個正確執行的代碼,它返回五個記錄,我的查詢是我應該如何只讀取整個文件並最終返回所需的行,只是假設我有 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

您可以使用 Pandas 以塊形式讀取文件的功能,只需根據需要加載盡可能多的數據。

data_iter = pd.read_csv(obj['Body'], chunksize = 5)
data = data_iter.get_chunk()
print(data)

您可以使用 HTTP Range:標頭( 請參閱 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出現在來自.csv文件的字符串中的\\t\\n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM