Проблема в настройке размера раздела в кадре данных Dask при чтении из БД - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь прочитать из таблицы и установить размер каждого куска 256 МБ без указания разделов и разделов. Но когда я проверяю размер каждого раздела, он меньше 60 МБ

Минимальный полный код для стимулирования проблемы:

Генерация данных:

import string
import sqlite3

from itertools import permutations
def create_table(cur):    
    query = '''create table sample(id int, name text)'''
    cur.execute(query)
c = 1
def get_chunk(n, chunk_size):
    chunk = []
    global c
    for d in permutations(string.ascii_uppercase, n):
        t = c , ''.join(d)
        chunk.append(t)
        c += 1
        if len(chunk) >= chunk_size:
            yield chunk
            chunk = []
    return chunk

def insert_data(cursor, n, chunk_size): 
    for chunk in get_chunk(n, chunk_size):
        cur.executemany('insert into sample values (?, ?)', chunk)
conn = sqlite3.connect('test.db')
cur = conn.cursor()
create_table(cur)
conn.commit()
insert_data(cur, 6, 1000)
conn.commit()

Для обработки

import dask.dataframe as dd
df = dd.read_sql_table('sample', 'sqlite:////path/to/test.db', 'id', bytes_per_chunk=268435456)
def fun(df):
    print(df.name.count())
    print(df.info())
df.map_partitions(fun).compute()

1 Ответ

1 голос
/ 05 мая 2019

dd.read_sql_table угадывает, как сделать деления, основываясь только на первых head_rows строках (по умолчанию пять), если вы не предоставите дополнительную информацию.Есть много способов, которыми эта оценка может быть неправильной!В этом случае вам кажется, что вы приличным фактором, и, возможно, вы можете исследовать конкретные причины, почему это может быть, но в целом, вам может быть лучше предоставить некоторую более конкретную информацию (количество разделов или явный запуск / остановка)пределы), если вы хотите больше контроля.

...