2016-12-01 7 views
1
for (fordate <- 2 to 30) { 
    val dataRDD = sc.textFile("s3n://mypath" + fordate + "/*") 
    val a = 1 
    val c = fordate - 1 
    for (b <- a to c) { 
    val cumilativeRDD1 = sc.textFile("s3n://mypath/" + b + "/*") 
    val cumilativeRDD : org.apache.spark.rdd.RDD[String] = sc.union(cumilativeRDD1, cumilativeRDD) 
    if (b == c) { 
     val incrementalDEviceIDs = dataRDD.subtract(cumilativeRDD) 
     val countofIDs = incrementalDEviceIDs.distinct().count() 
     println(s"201611 $fordate $countofIDs") 
    } 
    } 
} 

私は毎日デバイスIDを取得するデータセットを持っています。私は一日あたりの増分数を把握する必要がありますが、私は自分自身にcumilativeRDDに参加するときには、エラー、次のsaysthrows: Scala - それ自体にRDDを追加します。

forward reference extends over definition of value cumilativeRDD

は、私はこれをどのように克服することができます。

+0

。このプロセスの*意図*を記述できますか? – maasg

+0

だから、私が正しく理解しているならば、*意図*は 'day [x]'を 'sum [1、x-1](day [i])'と比較することです。可変スコープの問題を解決するほかに、この実装はネットワークからのデータではn^2です。 'day 1' x' n 'times、 'day 2' x' n-1' times、...を読んでいます。私はあなたのプロセスを見直して、見たデータを集計し、1回のパスで比較することをお勧めします。 – maasg

答えて

1

問題は、この行です:

val cumilativeRDD : org.apache.spark.rdd.RDD[String] = sc.union(cumilativeRDD1 ,cumilativeRDD) 

あなたはそれの宣言の前にcumilativeRDDを使用しています。変数の代入は右から左に作用します。 =の右側には、左側の変数が定義されています。したがって、独自の定義内で変数を使用することはできません。方程式の右側に変数がまだ存在しないためです。

あなたが最初の実行でcumilativeRDDを初期化する必要があり、その後、あなたは次の実行でそれを使用することができます:あなたが達成しようとしているものをクリアしていない

var cumilativeRDD: Option[org.apache.spark.rdd.RDD[String]] = None 
for (fordate <- 2 to 30) { 
    val DataRDD = sc.textFile("s3n://mypath" + fordate + "/*") 
    val c = fordate - 1 
    for (b <- 1 to c) { 
     val cumilativeRDD1 = sc.textFile("s3n://mypath/" + b + "/*") 
     if (cumilativeRDD.isEmpty) cumilativeRDD = Some(cumilativeRDD1) 
     else cumilativeRDD = Some(sc.union(cumilativeRDD1, cumilativeRDD.get)) 

     if (b == c) { 
     val IncrementalDEviceIDs = DataRDD.subtract(cumilativeRDD.get) 
     val countofIDs = IncrementalDEviceIDs.distinct().count() 
     println("201611" + fordate + " " + countofIDs) 
     } 
    } 
    } 
+0

これを実行しても、同じエラーがスローされます: '前方参照は値の定義を超えて拡張されます ' – toofrellik

+0

もう少しコンテキストを与えることができますか?このエラーはどのラインで正確にスローされますか? – gesundkrank

+0

_error:前方参照は値の定義を超えていますcumilativeRDD_ 'val cumilativeRDD:org.apache.spark.rdd.RDD [String] = sc.union(cumilativeRDD1、cumilativeRDD)' – toofrellik

関連する問題