我正在尝试计算分组数据中的所有唯一行,即每组中存在多少个唯一行。
虽然groupedData.distinct().count()
适用于相对较少的行,但在大约200k行上运行它(例如在我的情况下),以“超出大小限制”结束。
我理解为什么会这样,但我无法想出更有效的方法 - 有办法吗?
答案 0 :(得分:0)
根据我的经验,Count在RethinkDB中是一件昂贵的事情。特别是对于需要迭代整个数据集的计数操作。我以前在这方面有点挣扎。
据我了解,当您将groupData传递给distinct
时,它会创建一个数组,因为groupData
将是一个序列,因此它有100,000个元素限制。
要解决这个问题,我认为我们必须使用流,而是计算流。我们不能使用group
因为它会返回一组流,换句话说,就是我的理解再次返回一个流数组。
以下是我如何解决它:
示例查询
r.table('t').distinct({index: 'index_name'})
.map(function(value) {
return {group: value, total: r.table('t').getAll(value, {index: 'index_name'}).count()}
})
有了这个,一切都是一个流,我们可以懒惰地在结果集上迭代,得到每个组的计数。