私は私のデータフレーム上のいくつかの記述統計を取得したい:SparkR - as.doubleでのエラー(X):タイプのベクトルにタイプ「S4」を強要することはできません「ダブル」
# 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()
を使用してもエラーは発生しません。
私は私はいくつかの理由で私のdf_t1$tutoalUsers
ではなく、二重のベクターの種類S4
あるので、私は効果なしでそれをキャストしようとしたことを理解し、これらのパッケージを使用して、そしてthisを読んでおりませんので、私の質問はthis oneとは異なります。
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)
とスパークの私のバージョンあなたは、より高度な統計的な概要を提供していないとあなたが標準Rを使用することはできませんスパーク1.5を使用している1.5.2
Spark 1.6.2をインストールするとこの問題が解決されます。 Spark 1.6.2の質問に続き、あまりにも多くの時間をかけすぎて実行することに問題があると聞きました。それについての考えはありますか? –
1.5以降、多くのバグ修正がありました。そのため、1.6+は私にとっては嫌なものです。適切に設定されていれば、重要なパフォーマンスの低下は見られません(特定の操作は別の方法でスケジュールされているため、修正する必要があります)。 – zero323