【发布时间】:2016-11-21 09:45:35
【问题描述】:
我想获得一些关于我的数据框的描述性统计数据:
# Initialize SparkR Contexts
library(SparkR) # Load library
sc <- sparkR.init(master="local[4]") # Initialize Spark Context
sqlContext <- sparkRSQL.init(sc) # Initialize SQL Context
# Load data
df <- loadDF(sqlContext, "/outputs/merged.parquet") # Load data into Data Frame
# Filter
df_t1 <- select(filter(df, df$t == 1 & df$totalUsers > 0 & isNotNull(df$domain)), "*")
avg_df <- collect(agg(groupBy(df_t1, "domain"), AVG=avg(df_t1$totalUsers), STD=sd(df_t1$totalUsers, na.rm = FALSE)))
head(avg_df)
我收到此错误:
Error in as.double(x) :
cannot coerce type 'S4' to vector of type 'double'
由sd() 制作。我尝试使用var() 并得到Error: is.atomic(x) is not TRUE。仅使用 avg() 时不会出错。
我的问题与this one 不同,因为我没有使用这些软件包,并且阅读this 我了解由于某种原因我的df_t1$tutoalUsers 是S4 类型而不是双精度向量,所以我尝试强制转换它没有效果:
avg_df <- collect(agg(groupBy(df_t1, "domain"),AVG=avg(df_t1$totalUsers), STD=sd(cast(df_t1$totalUsers, "double"),na.rm = FALSE)))
想法?
编辑:架构是
> printSchema(df_t1)
root
|-- created: integer (nullable = true)
|-- firstItem: integer (nullable = true)
|-- domain: string (nullable = true)
|-- t: integer (nullable = true)
|-- groupId: string (nullable = true)
|-- email: integer (nullable = true)
|-- chat: integer (nullable = true)
我的 Spark 版本是 1.5.2
【问题讨论】:
标签: r apache-spark dataframe apache-spark-sql sparkr