我有这个 Spark 表:
xydata
y: num 11.00 22.00 33.00 ...
x0: num 1.00 2.00 3.00 ...
x1: num 2.00 3.00 4.00 ...
...
x788: num 2.00 3.00 4.00 ...
xy_df
以及一个连接到该表的名为的句柄。
我想要计算invoke
的selectExpr
函数mean
,例如:
xy_centered <- xy_df %>%
spark_dataframe() %>%
invoke("selectExpr", list("( y0-mean(y0) ) AS y0mean"))
这也适用于所有其他列。
但是当我运行它时,它给出了这个错误:
Error: org.apache.spark.sql.AnalysisException: expression 'y0' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;
我知道会发生这种情况,因为在常见的 SQL 规则中,我没有为聚合函数 ( )GROUP BY
中包含的列添加子句。mean
如何GROUP BY
将invoke
方法放入?
以前,我设法使用另一种方式完成目的,即:
- 计算
mean
每列的summarize_all
- 收集
mean
内部R - 应用这意味着使用
invoke
和selectExpr
正如这个答案中所解释的那样,但现在我试图通过将所有操作放在 Spark 本身中来稍微加快执行时间,而不向 R 检索任何内容。
我的 Spark 版本是 1.6.0