将gapply函数替换为SparkR中的其他代码

时间:2017-03-01 09:55:13

标签: r apache-spark sparkr

如何替换SparkR中的gapply函数?我想聚合一些数据并将函数应用于聚合数据,而我不想要一个collect()函数,数据不会回到驱动程序机器上。

我有DatraFrame Spark:

       CNPJ              PID              DATA     N
 23104577000149   7898586660649     2016-02-01     2
 23104577000149   7898132542078     2016-02-01     2
 11660954000147   7898944830295     2016-02-01     2
 10140281000131   7896496920747     2016-02-01     1
 23104577000149   7891772150900     2016-02-01     1
 10140281000131   789895720413854   2016-01-31     1

我希望聚合CNPJ和PID字段。

像这样:

schema <- structType(structField("CNPJ", "string"),
               structField("PID", "string"),
               structField("DATA", "date"), 
               structField("N", "double"))

result <- gapply(
    ds_filtered,
    c("CNPJ", "PID"),
    function(key, x)
    { 
     dts <- data.frame(key, DATA = seq(min(as.Date(x$DATA)), as.Date(e_date), "days")) 
     colnames(dts)[c(1, 2)] <- c("CNPJ", "PID") 
     y <- data.frame(key, DATA = as.Date(x$DATA), N = x$N) 
     colnames(y)[c(1, 2)] <- c("CNPJ", "PID") 
     y <- dplyr::left_join(dts, y, by = c("CNPJ", "PID", "DATA")) 
     y[is.na(y$N), 4] <- 0 
     data.frame(CNPJ = as.character(y$CNPJ), 
                PID = as.character(y$PID), 
                DATA = as.Date(y$DATA), 
                N = y$N) 
   },
   schema
)

在我的gapply中,我使用日期(类型日期)填写DATA列。然后我用零填写缺少的日期。

gapply在Databricks环境中不起作用(矿石:https://issues.apache.org/jira/browse/SPARK-19711)。

所以,我不能使用gapply。 : - (

谢谢!

0 个答案:

没有答案