SparkR意思是:为什么我必须使用head(select(df,mean(df $ age))

时间:2017-11-21 13:09:40

标签: apache-spark spark-dataframe mean sparkr

我在文档中发现我应该这样做:mean(df$c)来计算均值并且它不起作用(它返回Column avg(age),而不是值)

我在databricks上找到了,我应该这样做:

meanAge=head(select(df, mean(df$age))

它有效!!但我不知道为什么/如何

特别是,head指令打算返回数据帧的第一个值,而不是单个值。不是吗?

这是计算平均值的最佳方法吗?

PS:typeof(df)返回' S4'

1 个答案:

答案 0 :(得分:1)

SparkR是一种用于操作Spark对象的DSL(特定于域的语言)。 SparkDataFrame不兼容data.frame,列上的操作具有不同的语义。

mean(df$c)只是一个描述,它甚至没有绑定到数据。它必须放在上下文中,select(df, ...)并通过操作进行评估head

如果您发现head让您感到困惑collect

 df <- createDataFrame(iris)

> df %>% select(mean(df$Petal_Length)) %>% collect()
  avg(Petal_Length)
1             3.758

或使用as.data.frame

> df %>% select(mean(df$Petal_Length)) %>% as.data.frame()
  avg(Petal_Length)
1             3.758

在所有情况下,您都会强制执行并以data.frame的形式获取结果。与head相比的差异在于它不限制行数(不适用于大型数据集)。