我在文档中发现我应该这样做:mean(df$c)
来计算均值并且它不起作用(它返回Column avg(age)
,而不是值)
我在databricks上找到了,我应该这样做:
meanAge=head(select(df, mean(df$age))
它有效!!但我不知道为什么/如何
特别是,head指令打算返回数据帧的第一个值,而不是单个值。不是吗?
这是计算平均值的最佳方法吗?
PS:typeof(df)
返回' S4'
答案 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相比的差异在于它不限制行数(不适用于大型数据集)。