#python #pandas #amazon-s3 #amazon-redshift #parquet
#python #pandas #amazon-s3 #amazon-redshift #parquet
Вопрос:
У меня есть список файлов parquet, которые я перемещаю из одной корзины s3 в другую. Перед копированием файлов parquet в корзину назначения я добавляю 2 столбца. У нас есть сканер glu, который выбирает данные из целевой корзины s3 и заполняет их красным смещением. Когда я запрашиваю таблицу в redshift, я получаю сообщение об ошибке » столбец ‘xyz’ имеет недопустимую длину типа. Ожидание: 7 len в файле: 6″ столбец, в котором есть ошибка, имеет десятичный тип данных (15,7). Это мой код, в котором я сначала считываю все файлы parquet в pandas dataframe, а затем добавляю дополнительные столбцы и записываю их обратно в формат parquet. Я погуглил ошибку, и ничего не помогло. my_parquet_list — это список всех файлов parquet
import pyarrow as pa
import pyarrow.parquet as pq
for file in my_parquet_list:
bucket = 'source_bucket_name'
buffer = io.BytesIO()
s3 = session.resource('s3')
s3_obj = s3.Object(bucket,file)
s3_obj.download_fileobj(buffer)
df = pd.read_parquet(buffer, engine='pyarrow')
df["col_new"] = 'aaa'
df["date"] = datetime.datetime.utcnow()
buffer = io.BytesIO()
table = pa.Table.from_pandas(df)
pq.write_table(table, buffer)
new_file_name = file.split('/')[-1]
bucketdest = 'destination bucket name'
s3_file = 'folder path/' new_file_name
print(s3_file)
s3 = session2.resource('s3')
s3.Object(bucketdest, s3_file).put(Body=buffer.getvalue())
print('loaded')
Комментарии:
1. Похоже, разница в строках между выводом и ожидаемым равна
7-6=1
? Имеет ли это отношение к заголовкам? Вы читаете данные без заголовков и записываете их обратно с дополнительной строкой с заголовками?2. @DavidErickson у моих данных есть заголовки, должен ли я специально упоминать заголовки, которые я кодирую
3. Я не уверен … это было единственное, о чем я мог подумать. Однако не похоже
read_parquet
, что для этого существует какой-то параметр.