Я загружаю файл из ковша S3 в качестве байтового потока, сохраняя его
локально, а затем читая его с Pandas. < /li>
Правильно загружается и сохраняет файл (насколько я могу судить): < /li>
Размер файла соответствует тому, что сообщается в S3. Файл сохраняется локально без ошибок. br /> Что я пробовал: < /strong> < /p>
вручную загружать и читать Файл: он работает отлично, когда я вручную загружаю файл с S3 с помощью консоли AWS и загружаю его в панды. У него даже было более миллиона рядов. Обычно он обнаруживает UTF-8, ASCII или аналогичное кодирование для байтового потока. Я также пытался вручную установить кодирование, но это тоже не сработало. В байтах от S3 в локальную память я подумал, что, возможно, что -то не так со строительством файла с использованием байтов, поэтому в качестве механизма резерва я добавил чек, который загрузил бы весь файл из S3, если подсчет строки для файла равно 0 (с подходом байта), но это было безрезультатно. Содержание файла они появляются как двоичные нули (\ x00), что кажется неправильным. ПРИМЕЧАНИЕ. При загрузке вручную и открыты с использованием Pandas. p>
Загруженный вручную файл отлично работает с пандами, поэтому файл в S3 не поврежден. < /li>
Моя текущая реализация включает загрузку файла в кусочках, реконструкцию его из потока, а затем сохранение его локально. не загружает строки в панд. Py PrettyPrint-Override ">
Код: Выделить всё
s3 = boto3.client('s3', region_name='', aws_access_key_id='', aws_secret_access_key='')
S3_BUCKET_NAME = ""
S3_FILE_KEY = ""
def download_and_read_file(s3_bucket, s3_key):
try:
print(f"Downloading file: {s3_key}")
response = s3.get_object(Bucket=s3_bucket, Key=s3_key)
file_content = response['Body'].read()
local_filename = "downloaded_file.csv"
with open(local_filename, "wb") as f:
f.write(file_content)
print(f"File saved locally as {local_filename}")
# loading the file into pandas
df = pd.read_csv(local_filename, low_memory=False)
print(f"Total rows in DataFrame: {df.shape[0]}")
print(df.head())
except Exception as e:
print(f"Error: {e}")
# calling the function
download_and_read_file(S3_BUCKET_NAME, S3_FILE_KEY)
Подробнее здесь: https://stackoverflow.com/questions/793 ... l-download