在sparkR中我有一个DataFrame' pgz'其中包含用户数据。要在' pgz'中获取所有user_id 1我们只需输入
filter(pgz, pgz$user_id==1)
我有一个'倾听'这是一个DataFrame。它只包含数字(1,3,4,5,11,25,....)。我把这个本地化,所以我可以得到参赛作品。
localliste <- collect(liste)
现在&#39; localliste&#39;是一个data.frame。 然后我有一个功能&#39; lev&#39;
lev <- function(j) {
user_id_pgz <- filter(pgz, pgz$user_id==as.numeric(localliste[j]))
t <- as.Date(first(user_id_pgz)[,6][1])
return(t)
}
返回&#39;。 当我在小j上运行这个功能时,功能非常快。计算t需要大约0.01秒。当我选择一个大的j时,函数需要更长的时间来计算t。当j = 1002时,计算lev(j)需要40秒。
这是一件奇怪的事情。在&#39; lev&#39;中运行第一行不花时间,但行
t<-as.Date(first(user_id_pgz)[,6][1])
大j需要时间。然而,如果j = 1000或j = 50000,则运行时间为40秒,但对于j = 25,运行时间约为1秒。那是为什么?
答案 0 :(得分:0)
我创建了一个最小的示例,其中每个user_id获得第6列的第一项。首先,我创建一个带有user_id列和col6的DataFrame(就像你的[,6],然后我按user_id分组(与过滤相同),最后,每组我取第一个元素。这样,你就有了每个user_id的结果,也许你在侦听中的元素较少?
df <- data.frame(user_id=c(1,1,2,2),
col6=c("2015-7-31","2015-8-31","2015-8-31","2015-7-31"))
pgz <- createDataFrame(sqlContext, df)
pgz$col6 <- cast(pgz$col6,'date')
results <- collect(agg(group_by(pgz,pgz$user_id),firstCol6 = first(pgz$col6)))