2016-12-19 9 views
0

私はspark MLlib-scalaでアプリケーションを持っています。トレーニング、テスト、検証の3つのパーティにデータを分割したいと考えています。私は、SBTのコンパイルと私のプログラムをコンパイルするとき値_1はorg.apache.spark.mllib.recommendation.Ratingのメンバーではありません

val training_RDD = Ratingfiles.filter(x => x._1 < 6) 
     .values 
     .cache() 

val validation_RDD = Ratingfiles.filter(x => x._1 >= 6 && x._1 < 8) 
     .values 
     .cache() 

、私はこのエラー:

value _1 is not a member of org.apache.spark.mllib.recommendation.Rating 

スパークコア:1.4.1 火花MLlib:2.0.1 私のコードは次のようですScalaのバージョン:2.11.1 のSBTバージョン:コンパイラの主張として0.13.12

+0

あなたはRatingfiles' 'の種類だかを示すことはできますか? –

+0

org.apache.spark.rdd.RDD [org.apache.spark.mllib.recommendation.Rating] = MapPartitionsRDD [2] – sirine

答えて

2

org.apache.spark.mllib.recommendation.Ratingメンバーは(おそらくメンバーであるためにタプル、とそれを混乱している_1と呼ばれていません_1,_2など)。

Rating

は3人のメンバーがありますので、

case class Rating @Since("0.8.0") (
    @Since("0.8.0") user: Int, 
    @Since("0.8.0") product: Int, 
    @Since("0.8.0") rating: Double) 

を - あなたはuserによってフィルタリングすることを意味している場合、単に_1するのではなく、そのメンバーにアクセス:

val training_RDD = Ratingfiles.filter(x => x.user < 6) 
    .cache() 

val validation_RDD = Ratingfiles.filter(x => x.user >= 6 && x.user < 8) 
    .cache() 
+0

パラメータタイムスタンプの最後の桁に基づいて、データを3つの重複しないサブセットに分割しました。ロングタイプです。 – sirine

+0

何ですか?コンパイラのエラーによると、 'Ratingfiles'はタイプ' RDD [Rating] 'を持っています。これは、各レコードが回答に列挙されているメンバーを持つ' Rating'であることを意味します。あなたは "タイムスタンプ"で分けようとしていると言いますが、 "レーティング"にはタイムスタンプとは考えられないものは何もありません。あなたはRDDに何が入っていると思いますか(どの_タイプ?)? –

+0

私は3つのパーティーに私のファイルを分割しました、新しいRDDは、評価の種類を取る必要があります。 x => x._1でx => x._1に変更しました。これは問題ありませんが、今では "値"を受け入れていません。 – sirine

0

スパーク評価クラスがあるため(3つの属性を持ちますスパーク0.8.0):

  • ユーザー
  • 製品
  • 評価

あなたが最初の値を取得したい場合は、あなたがuser()を起動する必要があります。第2の値product(); 3番目の値rating()

ソース:https://spark.apache.org/docs/1.4.0/api/java/org/apache/spark/mllib/recommendation/Rating.html

https://github.com/apache/spark/blob/master/mllib/src/main/scala/org/apache/spark/mllib/recommendation/ALS.scala

関連する問題