Spark 2.0中使用DataSet的迭代器

时间:2017-02-12 14:49:21

标签: scala iterator apache-spark-2.0 apache-spark-dataset

如何在Spark 2.0和scala中迭代DataSet?我的问题是 - 我需要比较两行。我需要比较DateN和DateN-1并计算差异。

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

1 个答案:

答案 0 :(得分:0)

不确定,您是否使用窗口功能解决了问题,因为您只想比较n& n-1行,我没有看到您要对数据进行分组的属性。对于您描述的要求,您可以按如下方式解决问题:

  1. 使用zipWithIndex为rdd添加索引。
  2. 为奇数索引行创建rdd。
  3. 为偶数索引行创建rdd。
  4. 现在你可以在两个rdds.1上应用你的逻辑。
  5. 以下是工作示例:

     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)