2017-02-12 2 views
0

Wie iteriere ich über ein DataSet in Spark 2.0 und Scala? Mein Problem ist - ich muss zwei Zeilen vergleichen. Ich muss DateN und DateN-1 vergleichen und die Differenz berechnen.Iteratoren mit DataSet in Spark 2.0

Row1 - Date1 Num1 
Row2 - Date2 Num2 
.. 
RowN- DateN NumN 
+0

hat Ihr df enthält nur zwei Reihen? Wenn nicht, was genau möchten Sie angesichts der Daten beantworten? Bitte machen Sie mehr auf das Problem, da es pflanzliche Methoden zur Verfügung stehen –

+0

Nein. Das ist nur ein Beispiel. Mein DS hat viele Zeilen. Wie ich oben erwähnt habe, muss ich zwei Daten von zwei Zeilen in einer Iteration in scala vergleichen und ihren Unterschied finden. –

+0

Sie wollen "Fensterfunktionen". Siehe zum Beispiel https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html –

Antwort

0

Nicht sicher, ob Sie Problem mit Fensterfunktion behoben, wie Sie gerade n & n-1 Zeilen vergleichen wollen, und ich sehe nicht, Attribut, auf dem Sie gruppieren möchten die Daten. Für Ihre beschriebene Anforderung können Sie das Problem wie folgt beheben:

  1. Fügen Sie den Index mithilfe von zipWithIndex zur rdd hinzu.
  2. Erstellen Sie RDD für ungerade indizierte Zeilen.
  3. Erstellen Sie RDD für gerade Indexzeilen.
  4. Jetzt können Sie Ihre Logik auf zwei rdds.1

gelten das Arbeitsbeispiel Es folgt:

val spark = SparkSession 
        .builder 
        .appName("Example") 
        .master("local[*]") 
        .getOrCreate() 
        import spark.implicits._ 
    val customers = spark.sparkContext.parallelize(List(("Alice", "2016-05-01", 50.00), 
             ("Alice", "2016-05-03", 45.00), 
             ("Alice", "2016-05-04", 55.00), 
             ("Bob", "2016-05-01", 25.00), 
             ("Bob", "2016-05-04", 29.00), 
             ("Bob", "2016-05-06", 27.00))) 

    val custIndexed = customers.zipWithIndex().collect() 
    val custOdd = custIndexed.filter(record=>record._2%2!=0) 
    val custEven = custIndexed.filter(record=>record._2%2==0) 
+0

ich war in der Lage zu lösen Es nutzt Fensterfunktionen. Danke ! –