2017-02-12 58 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

我能够解决它使用窗口函数。谢谢 ! –