Как прочитать только 5 записей из корзины s3 и вернуть ее, не получив все данные из файла csv - PullRequest
0 голосов
/ 28 марта 2019

Привет, ребята, я знаю много похожих вопросов, которые я найду здесь, но у меня есть код, который выполняется правильно, который возвращает пять записей, и мой запрос состоит в том, как мне только прочитать весь файл и вернуть atlast с желаемыми строками просто suposeУ меня есть CSV-файл, который имеет размер в ГБ, поэтому я не хочу возвращать все данные ГБ-файла для получения только 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)

Этот мой код, который работает нормально, также получает 5 записей из корзины s3, но я объяснил, что я ищудля любого другого запроса, не стесняйтесь, напишите мне ... Thnxx заранее

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Вы можете использовать возможность панд , считывая файл кусками , просто загружая столько данных, сколько вам нужно.

Data_iter = pd.read_csv(obj['Body'], chunksize = 5)
Data = Data_iter.get_chunk()
print(Data)
1 голос
/ 28 марта 2019

Вы можете использовать заголовок HTTP Range: ( см. RFC 2616 ), который принимает аргумент диапазона байтов.В API S3 есть условие для этого, и это поможет вам НЕ читать / скачивать весь файл 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...