簡體   English   中英

使用Spark和Scala膨脹數據集

[英]Bloating a dataset with spark & scala

這是我的要求

輸入

customer_id status  start_date  end_date
1   Y   20140101    20140105
2   Y   20140201    20140203

產量

customer_id status  date
1   Y   20140101
1   Y   20140102
1   Y   20140103
1   Y   20140104
1   Y   20140105
2   Y   20140201
2   Y   20140202
2   Y   20140202

我正在嘗試通過火花中的笛卡爾積來實現這一目標,它看起來效率很低。 我的數據集太大。 我正在尋找更好的選擇。

如果我正確地理解了您的想法,您可以按照以下方式進行操作:

  val conf = new SparkConf().setMaster("local[2]").setAppName("test")
  val sc = new SparkContext(conf)

  case class Input(customerId: Long, status: String, startDate: LocalDate, endDate: LocalDate)
  case class Output(customerId: Long, status: String, date: LocalDate)

  val input: RDD[Input] = sc.parallelize(Seq(
    Input(1, "Y", LocalDate.of(2014, 1, 1), LocalDate.of(2014, 1, 5)),
    Input(2, "Y", LocalDate.of(2014, 1, 1), LocalDate.of(2014, 1, 3))
  ))

  val result: RDD[Output] = input flatMap { input =>
    import input._
    val dates = Stream.iterate(startDate)(_.plusDays(1)).takeWhile(!_.isAfter(endDate))
    dates.map(date => Output(customerId, status, date))
  }

  result.collect().foreach(println)

輸出:

Output(1,Y,2014-01-01)
Output(1,Y,2014-01-02)
Output(1,Y,2014-01-03)
Output(1,Y,2014-01-04)
Output(1,Y,2014-01-05)
Output(2,Y,2014-01-01)
Output(2,Y,2014-01-02)
Output(2,Y,2014-01-03)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM