【问题标题】:SparkR - Error in as.double(x) : cannot coerce type 'S4' to vector of type 'double'SparkR - as.double(x) 中的错误:无法将“S4”类型强制转换为“double”类型的向量
【发布时间】: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$tutoalUsersS4 类型而不是双精度向量,所以我尝试强制转换它没有效果:

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


    【解决方案1】:

    您使用的 Spark 1.5 不提供更高级的统计摘要,并且在 Spark DataFrame 上运行时无法使用标准 R 函数。 avg() 之所以有效,是因为它实际上是 Spark 1.5 中可用的 Spark SQL 函数。

    Spark 1.6 中引入了其他统计摘要,包括计算标准差的方法(sdstddevstddev_sampstddev_pop)和方差(varvariancevar_samp、@ 987654331@)。当然,您仍然可以使用众所周知的公式计算标准差,如Calculate the standard deviation of grouped data in a Spark DataFrame

    【讨论】:

    • 安装 Spark 1.6.2 解决了这个问题。关于 Spark 1.6.2 的后续问题,我听说存在拆分过多使其运行速度变慢的问题:对此有何想法?
    • 自 1.5 以来已经有很多错误修正,所以 1.6+ 对我来说是理所当然的。如果配置正确,我还没有看到显着的性能下降(尽管某些操作可能以不同的方式安排,因此您必须对此进行更正)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多