在sparkR中,我有一个DataFrame 'pgz‘,它包含用户的数据。要获得“pgz”中的所有user_id 1,我们只需键入
filter(pgz, pgz$user_id==1)我有一个'liste‘,这是一个DataFrame。它只是包含数字(1,3,4,5,11,25,.)。我把这个放在本地,这样我就能拿到参赛作品了。
localliste <- collect(liste)现在'localliste‘是一个data.frame。然后我有一个函数'lev‘
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)
}它还能返回。当我在小j上运行这个函数时,这个函数非常快。计算t需要大约0.01秒。当我选择larg时,函数计算t的时间要长一些。当j=1002计算时,计算lev(j)需要40秒。
这是一件奇怪的事。要运行'lev‘中的第一行,只需花时间
t<-as.Date(first(user_id_pgz)[,6][1])对于较大的j值,需要时间。但是,如果j=1000或j=50000的运行时间是40秒,那么这是很重要的,但是对于j=25,运行时间大约是1秒。那是为什么?
发布于 2015-08-14 11:35:01
我已经创建了一个最小的示例,在这个示例中,每个user_id获得第6列的第一项。首先,我使用user_id列和col6创建了一个col6(像您的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)))https://stackoverflow.com/questions/32006545
复制相似问题