DuckDB: проблема нехватки памяти в groupby-maxPython

Программы на Python
Ответить
Anonymous
 DuckDB: проблема нехватки памяти в groupby-max

Сообщение Anonymous »

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

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

import duckdb
from pathlib import Path

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

con = duckdb.connect()
result = con.sql(f"""
SET threads=10;
SET memory_limit='10GB';
SET preserve_insertion_order=false;
COPY(SELECT
html,
dateModified,
ROW_NUMBER() OVER (PARTITION BY html ORDER BY dateModified DESC) AS rn
FROM read_ndjson('{inDir / "*wiktionary*.ndjson"}'))
TO "{outDir}"
""")
Тогда я столкнулся с ошибкой

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

---------------------------------------------------------------------------
OutOfMemoryException                      Traceback (most recent call last)
Cell In[3], line 10
7 outDir  = Path(outDir)
9 con = duckdb.connect()
---> 10 result = con.sql(f"""
11     SET threads=10;
12     SET memory_limit='10GB';
13     SET preserve_insertion_order=false;
14     COPY(SELECT
15         html,
16         dateModified,
17         ROW_NUMBER() OVER (PARTITION BY html ORDER BY dateModified DESC) AS rn
18     FROM read_ndjson('{inDir / "*wiktionary*.ndjson"}'))
19     TO "{outDir}"
20 """)

OutOfMemoryException: Out of Memory Error: could not allocate block of size 256.0 KiB (9.3 GiB/9.3 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
Мой ноутбук имеет 32 ГБ оперативной памяти и 8 ядер процессора (16 потоков). Я прочитал «Управление памятью» в DuckDB, но не смог понять, как точно настроить параметры.
Не могли бы вы объяснить, как точно настроить параметры для моей рабочей нагрузки?

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

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

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

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

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

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