0

我有这个 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以及一个连接到该表的名为的句柄。

我想要计算invokeselectExpr函数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 BYinvoke方法放入?

以前,我设法使用另一种方式完成目的,即:

  1. 计算mean每列的summarize_all
  2. 收集mean内部R
  3. 应用这意味着使用invokeselectExpr

正如这个答案中所解释的那样,但现在我试图通过将所有操作放在 Spark 本身中来稍微加快执行时间,而不向 R 检索任何内容。

我的 Spark 版本是 1.6.0

4

0 回答 0