SparkR: разделить-применить-объединить в стиле dplyr на DataFrame
В предыдущей парадигме RDD я мог указать ключ и затем сопоставить операцию с элементами RDD, соответствующими каждому ключу. Я не вижу четкого способа сделать это с DataFrame в SparkR с 1.5.1. То, что я хотел бы сделать, это что-то вродеdplyr
операция:
new.df <- old.df %>%
group_by("column1") %>%
do(myfunc(.))
В настоящее время у меня есть большой SparkR DataFrame в форме:
timestamp value id
2015-09-01 05:00:00.0 1.132 24
2015-09-01 05:10:00.0 null 24
2015-09-01 05:20:00.0 1.129 24
2015-09-01 05:00:00.0 1.131 47
2015-09-01 05:10:00.0 1.132 47
2015-09-01 05:10:00.0 null 47
Я сортировал поid
а такжеtimestamp
.
Я хочу сгруппировать поid
, но я не хочу агрегировать. Вместо этого я хочу сделать набор преобразований и вычислений для каждой группы - например, интерполировать для заполнения NA (которые генерируются, когда яcollect
DataFrame, а затем преобразоватьvalue
к числовому). Я тестировал с помощьюagg
, но в то время как мои вычисления действительно выполняются, результаты не возвращаются, потому что я не возвращаю ни одного значения вmyfunc
:
library(zoo)
myfunc <- function(df) {
df.loc <- collect(df)
df.loc$value <- as.numeric(df.loc$value)
df.loc$newparam <- na.approx(df.loc$value, na.rm = FALSE)
return(df.loc)
# I also tested return(createDataFrame(sqlContext, df.loc)) here
}
df <- read.df( # some stuff )
grp <- group_by(df, "id")
test <- agg(grp, "myfunc")
15/11/11 18:45:33 INFO scheduler.DAGScheduler: Job 2 finished: dfToCols at NativeMethodAccessorImpl.java:-2, took 0.463131 s
id
1 24
2 47
Обратите внимание, что операции вmyfunc
все работают правильно, когда яfilter
DataFrame до одногоid
и запустить его. На основании времени, которое требуется для выполнения (около 50 секунд на задачу) и того факта, что исключения не выдаются, я считаю,myfunc
действительно работает на всехid
с - но мне нужен выход!
Любой вклад будет оценен.