Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据集太大,无法加载到内存中进行处理 我有一个更大的快速增长的数据集,大约400万行,为了定义和排除离群值(对于统计/分析使用),我需要算法来考虑这个数据集中的所有条目。然而,这是太多的数据加载到内存和我的系统阻塞。我目前正在使用它来收集和处理数据: @scoreInnerFences = innerFence Post.where( :source => 1 ). order( :score ). pluck( :score )_Mysql_Ruby On Rails_Ruby_Ruby On Rails 3_Ruby On Rails 3.2 - Fatal编程技术网

Mysql 数据集太大,无法加载到内存中进行处理 我有一个更大的快速增长的数据集,大约400万行,为了定义和排除离群值(对于统计/分析使用),我需要算法来考虑这个数据集中的所有条目。然而,这是太多的数据加载到内存和我的系统阻塞。我目前正在使用它来收集和处理数据: @scoreInnerFences = innerFence Post.where( :source => 1 ). order( :score ). pluck( :score )

Mysql 数据集太大,无法加载到内存中进行处理 我有一个更大的快速增长的数据集,大约400万行,为了定义和排除离群值(对于统计/分析使用),我需要算法来考虑这个数据集中的所有条目。然而,这是太多的数据加载到内存和我的系统阻塞。我目前正在使用它来收集和处理数据: @scoreInnerFences = innerFence Post.where( :source => 1 ). order( :score ). pluck( :score ),mysql,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.2,Mysql,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.2,使用典型的分而治之方法是行不通的,我不认为,因为必须考虑每个条目以保持异常值计算的准确性。如何有效地实现这一点 innerFence确定数据集的下四分位和上四分位,然后使用这些结果计算异常值。以下是这方面的代码(尚待重构,非干式): 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 q

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

innerFence
确定数据集的下四分位和上四分位,然后使用这些结果计算异常值。以下是这方面的代码(尚待重构,非干式):

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

对于大型数据集,我有时会下拉到ActiveRecord下面。这是一个记忆猪,即使我想象,使用勇气。当然,它的便携性较差,但有时还是值得的

scores=Post.connection.execute('select scores from posts where score>1 order by scores').map(&:first)


我不知道这是否足以创造400万美元的记录。如果不是,可以查看存储过程?

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

问几个问题。首先计算分数的数量:

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

然后你做你的计算 然后你去拿分数

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

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


代码可能是错的,但我相信你明白了。

innerFence做什么?显而易见的答案是在数据库中而不是在Ruby中使用
innerFence
执行任何操作,但这是否可行取决于
innerFence
的实际实现。它是识别数据集的上下四分位,然后计算异常值。我在上一次编辑中添加了源代码。有时跳过AR是正确的,但在这种情况下,与其他许多情况一样,它只会帮助你更快地击中自己的脚。;)这个问题的解决比将数百万个数字加载到rails中要简单得多。这条路线工作得更好,我能够通过根据计数选择四分位数w/偏移量来实现它,而不是将所有数据加载到rails中。谢谢很高兴它有帮助!如果有人在您插入数据的同时插入数据,您可能希望将其包装到事务中。