我正在尝试从表中读取数据并将每个块的大小设置为256MB,而不指定分区和分区。但是当我检查每个分区的大小时,它小于60 MB
用于刺激问题的最小完整代码:
生成数据:
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()
答案 0 :(得分:1)
dd.read_sql_table
猜测在不提供更多信息的情况下,如何仅基于前head_rows
行进行划分(默认为五行)。有很多方法可能会导致此估计错误!在这种情况下,您似乎受到了不错的考虑,也许您可以调查造成这种情况的具体原因,但总的来说,最好提供一些更具体的信息(分区数或显式的启动/停止)限制)。如果您想进一步控制。