3

分位点、平均、カテゴリの頻度などの統計を計算するために SparkR を調査しています (ソース ファイルは Amazon S3 - csv 形式です)。

csv ファイルを解析してデータフレームを作成できます。ただし、この spark-dataframe を標準の R 関数などで使用することはできませんquantile(), mean()

例として、R データフレーム 'test' を次に示します。

> test <- data.frame(x=c(26,21,20),y=c(34,29,28))
> quantile ( test$x )
  0%  25%  50%  75% 100% 
20.0 20.5 21.0 23.5 26.0 

上記のデータフレームは正しい結果を生成します。ただし、経由で作成されたデータフレームread.df()は関数で機能しませんquantile()

> myDf = read.df(sqlContext, "s3n://path/s3file.csv", , source="com.databricks.spark.csv")
> quantile ( myDf$column1 )
Warning messages:
1: In is.na(<S4 object of class "Column">) :
  is.na() applied to non-(list or vector) of type 'S4'
2: In is.na(x) : is.na() applied to non-(list or vector) of type 'S4'
Error in x[order(x, na.last = na.last, decreasing = decreasing)] : 
  error in evaluating the argument 'i' in selecting a method for function '[': Error in x[!nas] : object of type 'S4' is not subsettable

私の質問は簡単です.ネイティブR関数でSparkRのデータフレームを使用することはありますか? または、SparkR データフレームをベクターに変換する方法。

前もって感謝します。

4

1 に答える 1

4

SparkR DataFrame にネイティブ R 関数を適用する方法はありません。最も簡単な方法は、DataFrame をローカルにすることです。

localDf <- collect(myDf)

この data.frame では、ネイティブの R 関数を適用できますが、分散された方法では適用できません。ネイティブ R 関数を使用して localDf を localDf2 に変更した場合、それを SparkR DataFrame に戻すことができます。

myDf2 <- createDataFrame(sqlContext, localDF2)
于 2015-07-15T14:23:27.363 に答える