DuckDB: как точно настроить параметры?Python

Программы на Python
Ответить
Anonymous
 DuckDB: как точно настроить параметры?

Сообщение Anonymous »

У меня есть несколько файлов ndjson размером около 800 ГБ. Они получены в результате разбора дампа Википедии. Я хотел бы удалить повторяющийся HTML. Таким образом, я группирую по "html" и выбираю JSON с самым последним "dateModified". Я запускаю приведенный ниже код на подмножестве данных размером 16 ГБ:

Код: Выделить всё

import duckdb
from pathlib import Path

inDir   = r"E:\Personal Projects\tmp\result"
outDir  = r"C:\Users\Akira\Documents\enwiktionary.ndjson"
inDir   = Path(inDir)
outDir  = Path(outDir)

con = duckdb.connect()

con.execute("SET threads=5")
con.execute("SET memory_limit='12.5GB'")
con.execute("SET preserve_insertion_order=false")

result = con.sql(f"""
COPY(
SELECT
arg_max(html, dateModified) as html
FROM read_ndjson('{inDir / "*enwiktionary*.ndjson"}')
GROUP BY url
)
TO "{outDir}"
""")
Тогда я получаю сообщение об ошибке:

Код: Выделить всё

---------------------------------------------------------------------------
OutOfMemoryException                      Traceback (most recent call last)
Cell In[5], line 16
12 con.execute("SET memory_limit='12.5GB'")
13 con.execute("SET preserve_insertion_order=false")
---> 16 result = con.sql(f"""
17     COPY(
18         SELECT
19         arg_max(html, dateModified) as html
20         FROM read_ndjson('{inDir / "*enwiktionary*.ndjson"}')
21         GROUP BY url
22         )
23     TO "{outDir}"
24 """)

OutOfMemoryException: Out of Memory Error: failed to allocate data of size 16.0 MiB (11.6 GiB/11.6 GiB used)

Possible solutions:
* Reducing the number of threads (SET threads=X)
* Disabling insertion-order preservation (SET preserve_insertion_order=false)
* Increasing the memory limit (SET memory_limit='...GB')

See also https://duckdb.org/docs/stable/guides/performance/how_to_tune_workloads
С другой стороны, если я установлю SET Memory_limit='13GB', код будет работать без ошибок. Мой ноутбук имеет 32 ГБ оперативной памяти и 8 ядер процессора (16 потоков). Я читал «Управление памятью» в DuckDB, но не смог понять, как точно настроить параметры.
  • Какие вычисления должны использовать DuckDB и не могут передаваться на диск?
  • Как точно настроить параметр Memory_limit с учетом имеющегося набора данных?


Подробнее здесь: https://stackoverflow.com/questions/798 ... parameters
Ответить

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

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

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

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

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