假设我有一个包含4个字段的表
table (id, alpha, beta, delta, gamma)
然后我想根据以下标准选择行
alpha
,beta
,delta
,gamma
)均不为空对于字段的每个组合(alpha
,beta
,delta
,gamma
),它至少有7行
SELECT alpha, beta, delta, gamma
FROM table
GROUP BY alpha, beta, delta, gamma
HAVING COUNT(*) >= 7
从每组中随机选择7到10行
所以我可以通过一系列(或大型复杂的)SQL查询来实现这一点,但如果我想使用dask集合或pandas数据帧,这可能吗?
我目前的尝试是通过dask.bag
,显然效率不高
bag = (db.read_text('/path/to/the/jsonlines')
.map(ujson.loads)
.filter(lambda x: x['alpha'] and x['beta'] and x['delta'] and x['gamma'])
.groupby(lambda x: (x['alpha'], x['beta'], x['delta'], x['gamma']))
.filter(lambda x: len(x[1]) > 7))
编辑:数据库预计会不断增长。 jsonlines文件的集合是我需要为任务包含的数据的当前快照(即我不想要新添加的数据)。
有更好的方法吗?