S3 Выберите извлечь заголовки в CSV - PullRequest
2 голосов
/ 26 апреля 2019

Я пытаюсь извлечь подмножество записей из CSV, хранящегося в корзине S #, используя следующий код:

s3 = boto3.client('s3')
bucket = bucket
file_name = file

sql_stmt = """SELECT S.* FROM s3object S LIMIT 10"""


req = s3.select_object_content(
    Bucket=bucket,
    Key=file,
    ExpressionType='SQL',
    Expression=sql_stmt,
    InputSerialization = {'CSV': {'FileHeaderInfo': 'USE'}},
    OutputSerialization = {'CSV': {}},
)

records = []
for event in req['Payload']:
    if 'Records' in event:
        records.append(event['Records']['Payload'])
    elif 'Stats' in event:
        stats = event['Stats']['Details']


file_str = ''.join(r.decode('utf-8') for r in records)

select_df = pd.read_csv(StringIO(file_str))
df = pd.DataFrame(select_df)
print(df)

Это успешно дает записи, но пропускает заголовки.

Я читаю здесь S3 Select CSV Headers , что S3 Select вообще не дает заголовков. Итак, возможно ли извлечь заголовки файла CSV в S3 любым другим способом?

1 Ответ

1 голос
/ 26 апреля 2019

Изменить InputSerialization={'CSV': {"FileHeaderInfo": "Use"}},

К InputSerialization={'CSV': {"FileHeaderInfo": "NONE"}},

Затем будет напечатано полное содержимое, включая header.

Объяснение:

FileHeaderInfo принимает одно из значений «NONE» ИЛИ «USE» ИЛИ «IGNORE».

Используйте параметр NONE вместо USE, затем будет напечатано header, а также NONEговорит, что вам нужно header, а также processing.

Вот ссылка.https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/s3.html#S3.Client.select_object_content

Надеюсь, это поможет.

...