运行 sparkR 中函数的时间

Running time for a function in sparkR

在 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)
}

哪个return't'。 当我运行这个函数在小j上这个函数真的很快。计算 t 大约需要 0.01 秒。当我选择较大的 j 时,函数需要更长的时间来计算 t。当 j=1002 时,计算 lev(j) 需要 40 秒。

这是一件奇怪的事情。 运行 'lev' 中的第一行不需要时间,但第

t<-as.Date(first(user_id_pgz)[,6][1])

大 j 需要时间。然而,如果 j=1000 或 j=50000,运行ning-time 是 40 秒,但对于 j=25,运行ning-time 大约是 1 秒,这并不重要。这是为什么?

我创建了一个最小示例,您可以根据 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)))