2015-08-27 6 views
1

У меня есть DataFrame в sparkR под названием pgz. Он содержит user_id и time. При фиксированном user_id k я получаюКак проверить записи в DataFrame в sparkR

y <- filter(pgz, pgz$user_id == k) 

Когда я типа head(y) и я могу увидеть некоторые времена для user_id k. «2005-02-04», «2005-06-06» .. Все они отсортированы, поэтому они увеличиваются. Для этого user_id я хочу, чтобы проверить, если он имеет times больше, чем установленное время я поставил на

fixtime <- "2010-01-01" 

Я хотел бы сохранить все user_id, который анонсировал раз больше, чем fixtime. Как это можно сделать?

ответ

1

Для начала, давайте создадим несколько примеров данных для тестирования

set.seed(1) 
dd = data.frame(id = base::sample(1:3, 4,TRUE), 
       times = base::sample(c("2005-02-04" , "2005-06-06", "2007-02-04" , "2006-06-06"), 
            12, TRUE)) 
dd$times = as.Date(dd$times) 
NROW(dd[dd$id==1 & dd$times > as.Date("2006-01-01"),]) 

Для этого набора данных, мы должны получить ответ 2.

Создать Спарк кадр данных

dd_sp = createDataFrame(sqlContext, dd) 

и затем фильтр

dd_sp_k = filter(dd_sp, dd_sp$id== 1 & 
      dd_sp$times > as.Date("2006-01-01")) 

Тогда мы можем использовать summarise, чтобы получить длину кадра

## This seems a bit clunky, bit it works. 
summarize(dd_sp_k, count = n(dd_sp_k$times)) %>% 
    head 

данных, который дает 2.

Смежные вопросы