2017-02-12 57 views
0

如何遍歷在星火2.0和Scala一個DataSet?我的問題是 - 我需要比較兩行。我需要比較DateN和DateN-1並計算差異。迭代器與數據集星火2.0

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

貴DF只包含兩行?如果不是你想要給出數據的答案是什麼?請詳細說明問題,因爲有可用的方法 –

+0

不,這只是一個例子。我的DS有很多行。正如我上面提到我需要在一個迭代中從階兩排兩個日期比較,發現它們的區別。 –

+0

你想要「窗口功能」。例如,請參閱https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html –

回答

0

不知道,不管你使用的窗函數解決問題,因爲你只是想比較ñ& N-1行,我不看屬性上要對數據進行分組。根據您所述的要求,您可以按如下方式解決問題:

  1. 使用zipWithIndex將索引添加到rdd。
  2. 創建RDD爲奇數索引行。
  3. 創建RDD即使索引行。
  4. 現在,你可以在兩個rdds.1

運用你的邏輯以下是工作示例:

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

我能夠解決它使用窗口函數。謝謝 ! –