2013-10-15 47 views
1

我刚开始使用德鲁伊,特别是使用RDruid,由于我们的数据集非常大,我想从数据库中抽取一个更小的随机样本。从德鲁伊数据库中随机抽样

使用RDruid我有一个查询,看起来像:

res2 = druid.query.groupBy(
    url = druid.url("hostname", port=8080), 
    dataSource = "playback", 
    intervals = interval(
    fromISO("2013-09-20T00:00:00"), 
    now() 
), 
    dimensions = list(dimension("platformInfo_deviceType"), dimension("isp")), 
    granularity="hour", 
    aggregations = list(
    sum(metric("streamStartCount")) 
) 
) 

我想有它建每小时/每分钟汇总的基础数据的随机部分。

这甚至可能吗?也许我可以尝试像分配一个随机的4位数字/字符串到底层的数据记录,并应用一个过滤器,只有记录匹配的规则。

E.g.如果随机字符串> 8888,那么它会选择8889和9999之间的所有记录。

任何想法?

+0

如果你会告诉我如何拉第n条记录,我会告诉你如何以(伪)随机间隔对任何特定数量的记录进行采样。 –

回答

0
sample.big.n <- function(n, max) trunc(runif(n, max=max+1)) 

sample.big.n(5, 1e9) 
[1] 960118066 734686176 291924461 238165419 195301121 
sample.big.n(5, 1e9) 
[1] 682097669 519657711 435974111 420722901 266094914 
sample.big.n(5, 1e9) 
[1] 134806446 281796597 595062788 551378278 648440525 

增加1到最大值,使最后一个记录与其余记录具有相同的机会。 runif的概率应接近0(或至少不大于1e-16),返回间隔的终点。