2016-11-29 16 views
0

私はunixtimeに2列の日付を持つデータフレームを持っており、これら2つの列の週の違いを探したいと思います。 SparkSQLにはweekOfYear UDFがありますが、両方の日付が同じ年にある場合にのみ役立ちます。それでは、どうやって週の違いを見つけることができますか?2つの日付の週の違いを見つける方法

p.s.私はScala Sparkを使用しています。

+0

Sparkのバージョンは何ですか? –

+0

@HZ:ベストアンサーを受け入れることを検討してください。 – mrsrinivas

答えて

1

をこの答えを更新します。このため、カスタム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| 
+-------------+-------------+--------------+ 

、したがって、あなたは違いを得ることができます!

1

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")))