Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Scala中,如何在开始日期和结束日期之间创建每月日期的日期数组列?_Java_Scala_Apache Spark_Explode_Date Range - Fatal编程技术网

Java 在Scala中,如何在开始日期和结束日期之间创建每月日期的日期数组列?

Java 在Scala中,如何在开始日期和结束日期之间创建每月日期的日期数组列?,java,scala,apache-spark,explode,date-range,Java,Scala,Apache Spark,Explode,Date Range,在Spark Scala中,我试图创建一个列,其中包含开始日期和结束日期(包括)之间的每月日期数组 例如,如果我们有2018-02-07和2018-04-28,那么阵列应该包含[2018-02-01、2018-03-01、2018-04-01] 除了月度版本外,我还想创建一个季度版本,即[2018-1,2018-2] 输入数据示例: id startDate endDate 1_1 2018-02-07 2018-04-28 1_2 2018-05-06 2018-05-31 2_1 2017-

在Spark Scala中,我试图创建一个列,其中包含开始日期和结束日期(包括)之间的每月日期数组

例如,如果我们有2018-02-07和2018-04-28,那么阵列应该包含[2018-02-01、2018-03-01、2018-04-01]

除了月度版本外,我还想创建一个季度版本,即[2018-1,2018-2]

输入数据示例:

id startDate endDate
1_1 2018-02-07 2018-04-28
1_2 2018-05-06 2018-05-31
2_1 2017-04-13 2017-04-14
预期(每月)产出1:

id startDate endDate dateRange
1_1 2018-02-07 2018-04-28 [2018-02-01, 2018-03-01, 2018-04-01]
1_1 2018-05-06 2018-05-31 [2018-05-01]
2_1 2017-04-13 2017-04-14 [2017-04-01]
最终预期(月度)产出2:

id Date
1_1 2018-02-01 
1_1 2018-03-01
1_1 2018-04-01
1_2 2018-05-01
2_1 2017-04-01
我有spark 2.1.0.167、Scala 2.10.6和JavaHotSpot 1.8.0172

我已经尝试在这里对类似的(日级别)问题实现了几个答案,但我正努力让月刊/季刊版本正常工作

下面的代码从开始日期和结束日期创建一个数组并将其分解。但是,我需要分解一个列,其中包含所有的月(季度)日期

val df1 = df.select($"id", $"startDate", $"endDate").
// This just creates an array of start and end Date
withColumn("start_end_array"), array($"startDate", $"endDate").
withColumn("start_end_array"), explode($"start_end_array"))
感谢您提供的任何线索。

案例类MyData(id:String,startDate:String,endDate:String,list:list[String])
case class MyData(id: String, startDate: String, endDate: String, list: List[String])
val inputData = Seq(("1_1", "2018-02-07", "2018-04-28"), ("1_2", "2018-05-06", "2018-05-31"), ("2_2", "2017-04-13", "2017-04-14"))
inputData.map(x => {
  import java.time.temporal._
  import java.time._
  val startDate = LocalDate.parse(x._2)
  val endDate = LocalDate.parse(x._3)
  val diff = ChronoUnit.MONTHS.between(startDate, endDate)
  var result = List[String]();
  for (index <- 0 to diff.toInt) {
    result = (startDate.getYear + "-" + (startDate.getMonth.getValue + index) + "-01") :: result
  }
  new MyData(x._1, x._2, x._3, result)
}).foreach(println)
val inputData=Seq((“1_1”、“2018-02-07”、“2018-04-28”)、(“1_2”、“2018-05-06”、“2018-05-31”)、(“2_2”、“2017-04-13”、“2017-04-14”)) inputData.map(x=>{ 导入java.time.temporal_ 导入java.time_ val startDate=LocalDate.parse(x._2) val endDate=LocalDate.parse(x._3) val diff=时间间隔(开始日期、结束日期) var结果=列表[字符串]();
对于(指数),如果范围跨越一年怎么办