2016-06-12 3 views
0

Rで1:10000データを作成しました。SparkRを使用して、1:10000データでRDDを作成しました。 SparkRを使用してデータ< 10を出力するようにフィルタリングしたい。私はSparkRを勉強しており、何か助けていただければ幸いです。重複しているとマークする前に注意深くお読みください。最後にデータフレームを扱うのが好きな人のためのコードも提供しました。sparkRデータフレームにないデータをフィルタリングする

library(SparkR) 
sc <- sparkR.init(master = "local") 
sqlContext <- sparkRSQL.init(sc) 
Data <- c(1:10000) 
distData <- SparkR:::parallelize(sc,Data) 

すべてのデータを印刷したい< 10.答えを得るために以下の方法を試しました。残念ながら、私はそれぞれのエラーを取得します。問題はパラレル化機能ではありません。私はフィルターと収集機能に問題があります。詳細は、実行したさまざまな試行と関連するエラーを参照してください。

SparkR:::filter(distData[distData < 10]) 

Error: Error in SparkR:::filter(distData[distData < 10]) : 
error in evaluating the argument 'x' in selecting a method for function  'filter': Error in distData[distData < 10] : 
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 : 
comparison (3) is possible only for atomic and list types 

SparkR:::filter(sc,distData[distData < 10]) 

Error in SparkR:::filter(sc, distData[distData < 10]) : 
error in evaluating the argument 'condition' in selecting a method for function 'filter': Error in distData[distData < 10] : 
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 : 
comparison (3) is possible only for atomic and list types 

SparkR:::collect(distData,filter(distData[distData<10])) 

Error in filter(distData[distData < 10]) : 
error in evaluating the argument 'x' in selecting a method for function 'filter': Error in distData[distData < 10] : 
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 : 
comparison (3) is possible only for atomic and list types 


SparkR:::collect(distData, function(dist){ 
    print(dist[dist<10]) 
}) 

Error in if (flatten) { : argument is not interpretable as logical 


filter(distData, function(dist){ 
    print(dist[dist<10]) 
}) 

Error in (function (classes, fdef, mtable) : 
unable to find an inherited method for function ‘filter’ for signature ‘"RDD", "function"’ 

は、私は、データフレームで動作

df <- SparkR:::createDataFrame(sqlContext,distData) 
colnames(df)<-c("random") 
df1<-subset(df, nana$random<10) 
SparkR:::collect(df1) 
+0

私は 'sparkR'についてはあまりよくありませんが、あなたがなぜプライベートファンサイト(' ::: 'によって隠されています)を使用しているのかを学んでいるのですか?私は['filter'](https://spark.apache.org/docs/1.6.0/api/R/filter.html)関数を使用しますが、データを長い形式にする必要があります。 – agstudy

+1

それはまだ重複しています。非難され、意図的に隠された機能を(他の質問の答えとして)使用しようとしています。答えは、他の回答のリソースを使用するか、廃止予定のRDDインターフェイスを使用しないようにすることです。 – hrbrmstr

+0

私の質問を丁寧に読んでいただければ、理解することができます。私はここで何かを正当化するつもりはない。私はRを使用することを知っています。フィルタリングのプロセスは、通常のRの2つのステップで行うことができます。私はsparkRを探索するために "私的な機能"を使用しています。私はsparkRがベクトルを扱うことができないと信じています。データフレーム形式のデータのみを処理できます。 sparkRの多くの先進的なユーザーがいるので、私が間違っている場合は私を修正します。 – Samarth

答えて

0

SparkRのみスパークデータフレーム上で動作し、1つの列のみでデータフレームをスパークリストされていないコマンド場合は動作するコードです。 distDataは1列のDataFrameですが、filter()構文はリストを操作していると見なしているようです。エラーのある例では、filter()コマンドで列名を指定する必要があります。 str(distData)を実行して列名を確認してください。 distData$colName < 10

サブセット()、sql、およびfilter()関数を使用してSpark DataFrameをフィルタする方法の例は、this questionの回答で利用できます。 @ zero323は、フィルタ関数の動作構文を記述した質問に答えました。

関連する問題