首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SparkR gapply函数返回多行R数据

SparkR gapply函数返回多行R数据
EN

Stack Overflow用户
提问于 2016-09-08 15:42:04
回答 1查看 1.3K关注 0票数 2

假设我想执行如下内容:

代码语言:javascript
复制
library(SparkR)
...
df = spark.read.parquet(<some_address>)
df.gapply(
    df,
    df$column1,
    function(key, x) {
        return(data.frame(x, newcol1=f1(x), newcol2=f2(x))
    }
)

其中函数的返回有多个行。要明确的是,文档中的示例(很遗憾地重复了星火文档中的许多示例非常简单)并不能帮助我识别是否会像我预期的那样处理。

对于在DataFrame中创建的具有每个组的n_k输出行的k个组,我期望这样的结果是,gapply()调用的结果将有和(1.k,n_k)行,其中键值被复制到每个组的每一个n_k行中,其中key k.然而,模式字段告诉我,这不是处理这个问题的方式--事实上,它意味着它要么希望将结果推入一个行中。

希望这是明确的,尽管是理论上的(很抱歉,我不能分享我的实际代码示例)。有人能验证或解释这样的函数将如何被实际对待吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-08 16:47:52

关于输入和输出的确切期望在正式文件中有明确的表述

SparkDataFrame的每个组应用一个函数。该函数将应用于SparkDataFrame的每一组,并且应该只有两个参数:分组键和对应于该键的R data.frame。组是从SparkDataFrames列中选择的。函数的输出应该是data.frame。 架构指定结果SparkDataFrame的行格式。它必须根据星区数据类型来表示R函数的输出模式。返回的data.frame的列名由用户设置。下面是R和Spark之间的数据类型映射。

换句话说,您的函数应该使用对应于该键的行的keydata.frame,并返回可以使用Spark类型表示的data.frame,该模式提供了作为schema参数的模式。对行数没有限制。例如,您可以按以下方式应用身份转换:

代码语言:javascript
复制
df <- as.DataFrame(iris)

gapply(df, "Species", function(k, x) x, schema(df))

与聚合的方式相同:

代码语言:javascript
复制
gapply(df, "Species",
  function(k, x) {
    dplyr::summarize(dplyr::group_by(x, Species), max(Sepal_Width))
  },
  structType(
    structField("species", "string"),
    structField("max_s_width", "double"))
)

尽管实际上您应该更喜欢直接在DataFrame (groupBy %>% agg)上进行聚合。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39395182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档