gpt4 book ai didi

mysql - 数据集太大,无法加载到内存中进行处理

转载 作者:太空宇宙 更新时间:2023-11-03 16:34:22 26 4
gpt4 key购买 nike

我有一个更大的快速增长的数据集,大约有 400 万行,为了定义和排除异常值(用于统计/分析用途),我需要算法来考虑该数据集中的所有条目。然而,加载到内存中的数据太多了,我的系统卡住了。我目前正在使用它来收集和处理数据:

@scoreInnerFences = innerFence Post.where( :source => 1 ).
order( :score ).
pluck( :score )

使用典型的分治法是行不通的,我不认为是因为必须考虑每个条目以保持异常值计算的准确性。如何有效地实现这一点?

innerFence 识别数据集的下四分位数和上四分位数,然后使用这些结果计算离群值。这是(尚未重构,非 DRY)代码:

def q1(s)
q = s.length / 4

if s.length % 2 == 0
return ( s[ q ] + s[ q - 1 ] ) / 2
else
return s[ q ]
end
end

def q2(s)
q = s.length / 4

if s.length % 2 == 0
return ( s[ q * 3 ] + s[ (q * 3) - 1 ] ) / 2
else
return s[ q * 3 ]
end
end

def innerFence(s)
q1 = q1(s)
q2 = q2(s)

iq = (q2 - q1) * 3

if1 = q1 - iq
if2 = q2 + iq

return [if1, if2]
end

最佳答案

这不是最好的方法,但它是一种简单的方法:

做几个查询。首先你数数分数:

q = Post.where( :source => 1 ).count

然后你做你的计算然后你获取分数

q1 = Post.where(:source => 1).反向顺序(:分数)。选择(“平均(分数)作为分数”)。偏移量(q).limit((q%2)+1)

q2 = Post.where(:source => 1).反向顺序(:分数)。选择(“平均(分数)作为分数”)。偏移量(q*3).limit((q%2)+1)

代码可能有误,但我相信您明白了。

关于mysql - 数据集太大,无法加载到内存中进行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10079911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com