Каждый день я получаю тысячи файлов паркета с одной и той же схемой в корзину S3. Я использую DuckDB с расширением Python3 для чтения всех файлов паркета и выделения из них данных.
Ниже приведен фрагмент кода, который я использую:
dtt = [array of datetime values]
for dt in dtt:
print('processing for date :' + str(dt))
ddt=dt.date()
dstr=str(dt)
yr=dstr[0:4]
mn=dstr[5:7]
dy=dstr[8:10]
rurl = "s3://s3bucket/hind/"+str(yr) +'/'+str(mn)+'/'+str(dy)+'/*.parquet'
nfdf=duckdb.sql("select maid,date,hour,h3id from read_parquet('" + str(rurl) +"') where h3id In " + str(tuple(uhids))).df()
Файлы паркета имеют размер 25-35 МБ каждый. Приведенный выше код работает, но не всегда. Я получаю сообщение об ошибке Segmentation Fault Core Dumped. У этой ошибки нет закономерности, поэтому я не могу определить, почему это не удается.
Я пробовал работать с различными типами экземпляров AWS. Самый стабильный экземпляр, который я нашел, — это экземпляр m6a.4xlarge. Однако это очень медленно. Когда я развертываю m6a.24xlarge или m6a.48xlarge - он работает быстрее - но ошибка дампа ядра тоже появляется очень быстро. Нет недостатка в оперативной памяти или месте на жестком диске. Параллельная обработка не выполняется и процессор занят.
Я использую последнюю версию AWS Cli 2.13.25, Python – 3.8.10, Ubuntu 22.04. Как я могу это исправить? Я готов изменить подход, если потребуется.
Ответ на предложение Дина
Я изменил код следующим образом. Вставляю сюда, может кому-то поможет.
Я заменил строку nfdf=duckdb.sql("select.... на следующую:
tempfil=str('p1_')+str(p)
con=duckdb.connect('file.db')
con.sql('drop table ' + str(tempfil))
con.sql('CREATE TABLE '+str(tempfil)+'(maid text,date date,hour integer,h3id varchar)')
con.sql("insert into " + str(tempfil) + " select maid,date,hour,h3id from read_parquet('" + str(rurl) +"') where h3id In " + str(tuple(uhids)))
ifile="/home/ubuntu/tdata1/p3_"+str(p)+"_"+str(dy)+str(mn)+str(yr)+".parquet"
con.sql("COPY "+ str(tempfil) +" TO '" + str(ifile) +"'")
con.table(tempfil).show()
con.sql('drop table ' + str(tempfil))
con.close()
@Carlo Я использую следующий код:
import duckdb
duckdb.execute("SET home_directory='/home/ubuntu/';")
duckdb.execute("INSTALL httpfs")
duckdb.execute("LOAD httpfs")
duckdb.execute("SET s3_access_key_id='XXXXXXXXX'")
duckdb.execute("SET s3_secret_access_key='XXXXXXXXXXX'")
duckdb.execute("SET s3_region='XXXXXXXX'")
duckdb.sql('PRAGMA platform')
duckdb.sql('PRAGMA version')
duckdb.sql("FROM duckdb_extensions() WHERE extension_name == 'httpfs'")
и получил следующий результат
Traceback (most recent call last):
File "ddbconfig.py", line 10, in
duckdb.sql('PRAGMA platform')
duckdb.CatalogException: Catalog Error: Pragma Function with name platform does not exist!
Did you mean "tpch"?
Подробнее здесь: https://stackoverflow.com/questions/772 ... ore-dump-e
DuckDb - Чтение файлов паркета из S3 - Обработка ошибки дампа ядра ⇐ Python
Программы на Python
-
Anonymous
1771069137
Anonymous
Каждый день я получаю тысячи файлов паркета с одной и той же схемой в корзину S3. Я использую DuckDB с расширением Python3 для чтения всех файлов паркета и выделения из них данных.
Ниже приведен фрагмент кода, который я использую:
dtt = [array of datetime values]
for dt in dtt:
print('processing for date :' + str(dt))
ddt=dt.date()
dstr=str(dt)
yr=dstr[0:4]
mn=dstr[5:7]
dy=dstr[8:10]
rurl = "s3://s3bucket/hind/"+str(yr) +'/'+str(mn)+'/'+str(dy)+'/*.parquet'
nfdf=duckdb.sql("select maid,date,hour,h3id from read_parquet('" + str(rurl) +"') where h3id In " + str(tuple(uhids))).df()
Файлы паркета имеют размер 25-35 МБ каждый. Приведенный выше код работает, но не всегда. Я получаю сообщение об ошибке Segmentation Fault Core Dumped. У этой ошибки нет закономерности, поэтому я не могу определить, почему это не удается.
Я пробовал работать с различными типами экземпляров AWS. Самый стабильный экземпляр, который я нашел, — это экземпляр m6a.4xlarge. Однако это очень медленно. Когда я развертываю m6a.24xlarge или m6a.48xlarge - он работает быстрее - но ошибка дампа ядра тоже появляется очень быстро. Нет недостатка в оперативной памяти или месте на жестком диске. Параллельная обработка не выполняется и процессор занят.
Я использую последнюю версию AWS Cli 2.13.25, Python – 3.8.10, Ubuntu 22.04. Как я могу это исправить? Я готов изменить подход, если потребуется.
Ответ на предложение Дина
Я изменил код следующим образом. Вставляю сюда, может кому-то поможет.
Я заменил строку nfdf=duckdb.sql("select.... на следующую:
tempfil=str('p1_')+str(p)
con=duckdb.connect('file.db')
con.sql('drop table ' + str(tempfil))
con.sql('CREATE TABLE '+str(tempfil)+'(maid text,date date,hour integer,h3id varchar)')
con.sql("insert into " + str(tempfil) + " select maid,date,hour,h3id from read_parquet('" + str(rurl) +"') where h3id In " + str(tuple(uhids)))
ifile="/home/ubuntu/tdata1/p3_"+str(p)+"_"+str(dy)+str(mn)+str(yr)+".parquet"
con.sql("COPY "+ str(tempfil) +" TO '" + str(ifile) +"'")
con.table(tempfil).show()
con.sql('drop table ' + str(tempfil))
con.close()
@Carlo Я использую следующий код:
import duckdb
duckdb.execute("SET home_directory='/home/ubuntu/';")
duckdb.execute("INSTALL httpfs")
duckdb.execute("LOAD httpfs")
duckdb.execute("SET s3_access_key_id='XXXXXXXXX'")
duckdb.execute("SET s3_secret_access_key='XXXXXXXXXXX'")
duckdb.execute("SET s3_region='XXXXXXXX'")
duckdb.sql('PRAGMA platform')
duckdb.sql('PRAGMA version')
duckdb.sql("FROM duckdb_extensions() WHERE extension_name == 'httpfs'")
и получил следующий результат
Traceback (most recent call last):
File "ddbconfig.py", line 10, in
duckdb.sql('PRAGMA platform')
duckdb.CatalogException: Catalog Error: Pragma Function with name platform does not exist!
Did you mean "tpch"?
Подробнее здесь: [url]https://stackoverflow.com/questions/77277353/duckdb-reading-parquet-files-from-s3-handling-segmentation-fault-core-dump-e[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия