【问题标题】:Using the agg-function in sparkR在 sparkR 中使用 agg 函数
【发布时间】:2015-08-04 12:05:40
【问题描述】:

假设我们有一个包含 ID 的数据集“数据”,并且对于每个 ID,我们有许多“分数”。例如,对于 ID=1,我们的分数为 25,41,23,...,33。

对于用户 1,我想计算该用户得分的总和。在 sparkR 我这样做

s = filter(data, data$user==1)
ss = agg(s, summa = sum(s$score) )

现在“ss”给了我 ID=1 的“分数”总和。我想创建一个数据集,在其中获取所有 ID 的分数总和。

例如,在 R 中我会这样做

newdata=matrix()
for(i in 1: Number of ID's ) {
    s = filter(data, data$user==i)         
newdata[i,] = c(i ,agg(s, summa = sum(s$score)) )
}

但这在 sparkR 中不起作用。它说“向量分配中的类型/长度无效(S4/0)”。有什么好的方法吗?

【问题讨论】:

    标签: r sparkr


    【解决方案1】:

    agg 在 groupedData 上完美运行,因此使用

    agg(groupBy(data, user), summa = sum(score))
    

    我不确定是否有必要使用 data$score 代替 score,或者遵循文档

    agg(groupBy(data,user), score="sum")
    

    【讨论】:

    • 这成功了。如果ID有2个分数,即score1和score2怎么办。我想把 sum(score1) - sum(score2)。在 sparkR 我这样做: bsi=agg(groupBy(all, "user_id"), amount_won="sum" - amount_spent="sum" ) 但由于 '=' 信号它不会运行。
    • 首先做聚合
    • 有道理,我可以完美地运行第一行但是当我运行第 2 行时 sparkR 说“在选择 withColumn 函数的方法时出现 col 错误。”
    • 可能变异了? mutate(aggregated, total=aggregated$score1-aggregated$score2)
    • 还是不行。嗯..应该可以减去这两个措施吧?
    猜你喜欢
    • 2015-05-14
    • 2016-01-22
    • 2016-02-22
    • 1970-01-01
    • 2016-02-19
    • 2019-08-02
    • 2017-04-06
    • 2021-07-14
    • 2016-06-13
    相关资源
    最近更新 更多