2013-10-15 45 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),返回間隔的終點。