以前の RDD パラダイムでは、キーを指定して、各キーに対応する RDD 要素に操作をマップすることができました。1.5.1 の時点で、SparkR の DataFrame でこれを行う明確な方法がわかりません。私がやりたいことは、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
、DataFramevalue
を数値に変換したときに生成されます)。を使用してテストしまし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
DataFrame を 1 つに落として実行すると、すべての操作がmyfunc
正しく機能することに注意してください。実行にかかる時間 (タスクあたり約 50 秒) と例外がスローされないという事実に基づいて、すべてのs で実際に実行されていると思いますが、出力が必要です!filter
id
myfunc
id
任意の入力をいただければ幸いです。