SparkR - Ошибка в as.double (x): невозможно привести тип 'S4' к вектору типа 'double'

r apache-spark dataframe apache-spark-sql sparkr

653 просмотра

1 ответ

478 Репутация автора

Я хочу получить некоторую описательную статистику для моего фрейма данных:

# 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().

Мой вопрос отличается от этого, потому что я не использую эти пакеты, и, читая это, я понимаю, что по какой-то причине my df_t1$tutoalUsersявляется типом S4вместо вектора типа double, поэтому я попытался привести его без эффекта:

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

Автор: Béatrice Moissinac Источник Размещён: 18.07.2016 05:20

Ответы (1)


1 плюс

192594 Репутация автора

Решение

Вы используете Spark 1.5, который не предоставляет более сложных статистических сводок, и вы не можете использовать стандартные функции R при работе в Spark DataFrame. avg()работает, потому что это на самом деле функция Spark SQL, доступная в Spark 1.5.

Дополнительные статистические сводки были введены в Спарке 1.6 , включая методы для вычисления стандартного отклонения ( sd, stddev stddev_sampа stddev_pop) и дисперсия ( var, variance, var_samp, var_pop). Конечно, вы все равно можете вычислить стандартное отклонение, используя хорошо известную формулу, как показано в разделе Рассчитать стандартное отклонение сгруппированных данных в кадре данных Spark.

Автор: zero323 Размещён: 18.07.2016 05:37
Вопросы из категории :
32x32