Чтение файлов Parquet в s3 с помощью Athena

Цель состоит в том, чтобы объединить несколько файлов паркета в одну таблицу Athena, чтобы я мог запрашивать их.

Я конвертировал два паркетных файла из csv:

pandas.read_csv('a.csv').to_parquet('a.parquet', index=False)
pandas.read_csv('b.csv').to_parquet('b.parquet', index=False)

CSV имеет формат id,name,age, например:

1,john,20
2,mark,25

Я загружаю их в корзину S3: s3://my-test-bucket, которая устроена так:

my-test-bucket
  -> folder1
    -> a.parquet
  -> folder2
    -> b.parquet

Затем создал таблицу в Афине через:

CREATE EXTERNAL TABLE `my_table`(
  `id` int, 
  `name` string, 
  `age` int
)
STORED AS PARQUET
LOCATION 's3://my-test-bucket'
tblproperties ("parquet.compress" = "SNAPPY");

Однако, когда я пытаюсь запросить таблицу через:

SELECT * FROM my_table;

В качестве возврата я получаю пустые строки. Есть ли что-то, чего мне не хватает?

Похоже, проблема с вашим паркетным файлом. То, как вы делаете что-то после создания файла паркета (создание таблицы и т. д.), выглядит правильно. Честно говоря, я никогда не пытался использовать файл паркета, сгенерированный напрямую из pandas (я думаю, что это доставляло мне проблемы в прошлом). Вместо этого, когда у меня был pandas DF, я просто преобразовал его в pyarrow DF, а затем записал в паркет. Это сработало для меня, если вы хотите попробовать.

Roberto 24.03.2022 11:15

@Roberto Я пытался преобразовать в DF pyarrow, а затем в паркет. Но результат тот же.

John Tan 28.03.2022 03:48
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможный обходной путь — использование Обработчик данных AWS:

import awswrangler as wr

path = 's3://my-test-bucket'

# Assume the data has been extracted in dict form from .csv
df = pd.DataFrame({
    "id": [1, 2],
    "name": ["John", "Jane"],
    "age": [10, 11],
    "folder": [1, 2]
})

wr.s3.to_parquet(
    df=df,
    path=path,
    dataset=True,
    mode = "overwrite",
    partition_cols=["folder"]
)

Это сгенерирует в s3:

my-test-bucket
  -> folder=1
    -> <some hash>.parquet
  -> folder=2
    -> <some hash>.parquet

Другие вопросы по теме

Map_partitions запускается дважды при сохранении кадра данных dask в паркете, и записи подсчитываются
Параллельное сохранение в тот же файл паркета с использованием dask, приводящее к ArrowInvalid
Dask DataFrame.to_parquet завершается сбоем при операции чтения-переразметки-записи
Parquet_cpp StreamWriter ничего не записывает в файл
Не удается передать большую таблицу SQL размером 30 ГБ с клиентского компьютера SQL Server в Azure Data Lake Gen2 в виде файла Parquet размером 530 МБ
Можно ли создать внешнюю таблицу куста на паркетном файле с другой схемой?
Какое хранилище данных было бы лучшим для быстрой записи/чтения десятков миллионов внедрений float32?
Apache Spark не может прочитать папку паркета, которая записывается с помощью потокового задания
Есть ли способ зафиксировать имя входного файла нескольких файлов паркета, прочитанных с помощью подстановочного знака в Spark?
AttributeError: __enter__ при использовании оператора with с read_parquet