AWS S3 Select пропускает пропущенные значения в наборе результатов - PullRequest
0 голосов
/ 15 апреля 2019

Я пытаюсь прочитать файл паркета, используя S3 Select , но сталкиваюсь с проблемами, когда данные содержат пропущенные значения - результаты, возвращаемые S3 select, пропускают все пропущенные значения, делая невозможным анализ выход. Воспроизводимый пример с python и boto3:

import pandas as pd
import numpy as np
import boto3

session = boto3.session.Session()
s3 = session.client('s3')

df = pd.DataFrame({'A': [1.0, 2.0, 3.0], 'B': [5, np.nan, 7]})
df['C'] = np.nan
print(df)

# Prints:
#        A    B   C
#   0  1.0  5.0 NaN
#   1  2.0  NaN NaN
#   2  3.0  7.0 NaN

bucket = 'your-test-bucket'
key = 'temp/s3_select/df.parquet'
df.to_parquet(f's3://{bucket}/{key}')

r = s3.select_object_content(
    Bucket=bucket,
    Key=key,
    ExpressionType='SQL',
    Expression='select s.A, s.B, s.C from s3object s',
    InputSerialization = {'Parquet': {}},
    OutputSerialization = {'CSV': {}},
)

records = []
for event in r['Payload']:
    if 'Records' in event:
        records.append(event['Records']['Payload'].decode('utf-8'))
print(records[0])

# Prints:
#    1.0,5.0
#    2.0
#    3.0,7.0

т.е. все пропущенные значения просто пропускаются.

Есть ли способ получить результат с отсутствующими значениями, соответствующим образом закодированными?

1 Ответ

0 голосов
/ 21 мая 2019

Это действительно была ошибка в AWS S3, и по состоянию на 9 мая 2019 года она была исправлена. Код выше теперь выдает

1.0,5.0,
2.0,,
3.0,7.0,
...