2

在之前的 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使用 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确实在所有的ids 上运行——但我需要输出!

任何输入将不胜感激。

4

0 回答 0