2017-11-14 9 views
1
scala> val dates = filtering1.map(x => (format.parse(x._1),format.parse(x._2))) 
dates: org.apache.spark.rdd.RDD[(java.util.Date, java.util.Date)] = MapPartitionsRDD[7] at map at <console>:34 

저장 아래분 단위로 스칼라 java.util.Date 차이를 찾는 방법은 무엇입니까?

scala> dates.collect 
res0: Array[(java.util.Date, java.util.Date)] = Array((Sat Jun 30 23:42:00 IST 2018,Thu Jul 04 15:10:00 IST 2019), (Sat Jun 30 23:37:00 IST 2018,Sun Jul 01 14:44:00 IST 2018), (Sat Jun 30 23:13:00 IST 2018,Sun Feb 28 23:34:00 IST 219), (Sat Jun 30 22:58:00 IST 2018,Mon Jul 01 18:22:00 IST 2019), (Sat Jun 30 22:36:00 IST 2018,Mon Jul 01 16:01:00 IST 2019), (Sat Jun 30 21:53:00 IST 2018,Tue Jul 02 10:36:00 IST 2019), (Sat Jun 30 21:42:00 IST 2018,Sun Jun 30 23:25:00 IST 2019), (Sat Jun 30 21:36:00 IST 2018,Mon Jul 01 16:47:00 IST 2019), (Sat Jun 30 21:16:00 IST 2018,Mon Jul 01 18:18:00 IST 2019), (Sat Jun 30 21:10:00 IST 2018,Thu Jul 04 12:25:00 IST 2019), (Sat Jun 30 21:02:00 IST 2018,Sat Dec 01 17:29:00 IST 2018), (Sat Jun 30 20:54:00 IST 2018,Mon Jul 01 15:51:00 IST 2019), (Sat Jun 30 ... 

그러나이 기간의 차가되도록 작동을 수행하는 방법을 함께 그룹화 값 분의 값을 준다.

나는 명령을 내리지 만, 원하는 결과를 얻지 못한다. 어떤 변화가 있어야 하는가?

val time_diff = dates.map(x => (x._2.getTime()-x._1.getTime())/(60*1000)%60)

(60*1000)%60) 값은 무엇을 상징합니까?

+0

가능한 복제 [자바 날짜/시간 차이를 계산 (https://stackoverflow.com/questions/5351483/calculate-date-time-difference-in-java) –

답변

1

getTime은 밀리 초를 제공하므로 1000.0으로 나누면 초가되며 1000.0 * 60으로 나누면 분이됩니다. LongInt으로 나누면 또 다른 Long이 나오므로 결과 분을 다음으로 가장 낮은 정수로 자릅니다. 계수 (60), % 60을 추가, 단순히 0-59에 분을 감싸고, 그래서 당신은 90 분 차이가 있다면, 그 1 시간 30 분 것, 그리고 계산 결과는 것 (30)

val t = System.currentTimeMillis 
val x = new java.util.Date(t) 
val y = new java.util.Date(t + 10000) // ten seconds later 
(y.getTime - x.getTime)/(1000.0 * 60) // 0.167 
(y.getTime - x.getTime)/(1000 * 60) // 0 ! 
1

첫 번째 문제는 두 번 빼면 시간이 길어질 수 있습니다. 둘째, getTime은 밀리 초 단위로 값을 반환합니다.

1000ms = 1 second 

그래서 먼저 1000으로 나누어 시간을 초 단위로 가져올 필요가 있습니다. 분 단위로 얻으려면 60으로 다시 나눕니다. 결과는 분이 필요합니다.

val time_diff = dates.map(x => (x._2.getTime()-x._1.getTime())/(60*1000))