0
我有一個數據幀在unixtime中有兩個列日期,我想查找這兩列之間的星期差異。 SparkSQL中有一個weekOfYear
UDF,但只有在兩個日期都在同一年的時候纔有用。那我怎樣才能找到周差呢?如何找到兩個日期之間的星期差異
p.s.我正在使用Scala Spark。
我有一個數據幀在unixtime中有兩個列日期,我想查找這兩列之間的星期差異。 SparkSQL中有一個weekOfYear
UDF,但只有在兩個日期都在同一年的時候纔有用。那我怎樣才能找到周差呢?如何找到兩個日期之間的星期差異
p.s.我正在使用Scala Spark。
您可以採取的辦法爲這個創建一個自定義的UDF的:
scala> val df=sc.parallelize(Seq((1480401142453L,1480399932853L))).toDF("date1","date2")
df: org.apache.spark.sql.DataFrame = [date1: bigint, date2: bigint]
scala> df.show
+-------------+-------------+
| date1| date2|
+-------------+-------------+
|1480401142453|1480399932853|
+-------------+-------------+
scala> val udfDateDifference=udf((date1:Long,date2:Long)=>((date1-date2)/(60*60*24*7)).toInt
|
|)
udfDateDifference: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function2>,IntegerType,Some(List(LongType, LongType)))
scala> val resultDF=df.withColumn("dateDiffernece",udfDateDifference(df("date1"),df("date2")))
resultDF: org.apache.spark.sql.DataFrame = [date1: bigint, date2: bigint ... 1 more field]
scala> resultDF.show
+-------------+-------------+--------------+
| date1| date2|dateDiffernece|
+-------------+-------------+--------------+
|1480401142453|1480399932853| 2|
+-------------+-------------+--------------+
,因此你可以得到的區別!
因爲你有UNIXTIME
日期格式,我們可以做這個表達式。
((date1-date2)/(60*60*24*7)).toInt
編輯: 更新這個答案與例如
spark.udf.register("weekdiff", (from: Long, to: Long) => ((from - to)/(604800)).toInt)
// 60*60*24*7 => 604800
df.withColumn("weekdiff", weekdiff(df("date1_col_name"), df("date2_col_name")))
Spark的版本是什麼? –
@HZ:考慮接受最好的答案。 – mrsrinivas