Столбец имеет недопустимую ошибку типа длины с файлами parquet

#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 , что для этого существует какой-то параметр.