DuckDb - Чтение файлов паркета из S3 - Обработка ошибки дампа ядраPython

Программы на Python
Ответить
Anonymous
 DuckDb - Чтение файлов паркета из S3 - Обработка ошибки дампа ядра

Сообщение 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"?


Подробнее здесь: https://stackoverflow.com/questions/772 ... ore-dump-e
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»