2017-07-04 3 views
1
私は私のデータフレーム内 java.sql.timestampタイプの2つのフィールドを持っています

に2をjava.sql.Timestampフィールド間の日数を取得し、私は以下にこれらの2つの列はScalaの

間の日数を検索するためにどのようなフォーマットであります* 2016-12-23 23:56:02.0(yyyy-MM-dd HH:mm:ss.S)

私は多くの方法を試しましたが、解決策は見つかりませんでした。だから誰でもここで助けてくれるはずです。

+1

あなた形式は 'yyyy-MM-dd HH:mm:ss.S'のようになります。 –

+0

重複した質問ではありません。これで私はjava.sql.timestamp形式について質問しており、あなたがマークした質問は日付について取っています。 @ElliottFrisch –

+0

はい..あなたは右のmuフォーマットがyyyy-MM-dd HH:mm:ss.Sです。私の質問に変更を加えました –

答えて

0

org.apache.spark.sql.functionsは宝物です。たとえば、正確に何をしたいんdatediff方法があります:here is the ScalaDoc.

例:

val spark: SparkSession = ??? // your spark session 
val sc: SparkContext = ??? // your spark context 

import spark.implicits._ // to better work with spark sql 

import java.sql.Timestamp 

final case class Data(id: Int, from: Timestamp, to: Timestamp) 

val ds = 
    spark.createDataset(sc.parallelize(Seq(
    Data(1, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-11 00:00:00")), 
    Data(2, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-21 00:00:00")), 
    Data(3, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-23 00:00:00")), 
    Data(4, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-07 00:00:00")) 
))) 

import org.apache.spark.sql.functions._ 

ds.select($"id", datediff($"from", $"to")).show() 

このスニペットを実行することによって、あなたは、次の出力で終わるでしょう:

+---+------------------+ 
| id|datediff(from, to)| 
+---+------------------+ 
| 1|    -10| 
| 2|    -20| 
| 3|    -22| 
| 4|    -6| 
+---+------------------+ 
+0

datediffメソッドは列を必要としますが、私は2つのフィールドを持っており、これらの2つのフィールドの間の日の違いが欲しい詳細は以下の通り です。val firstDate:java.sql.TimeStamp = 2016-12-23 23:56:02.0 val secondDate:java.sql.TimeStamp = 2017-12-23 23:56:02.0 これら2つの間の日数が必要です日付 –

+0

あなたは列を扱うことを妨げる原因は何ですか? – stefanobaghino

+0

変数名を指定すると、以下のエラーが発生します。 :291:エラー:型が一致しません。 が見つかりました:をjava.sql.Timestamp 必要:あなたの代わりに列を操作できるように、コードを再構築するための方法はありませんorg.apache.spark.sql.Column ヴァルdiffOfDays = DateDiff関数(firstDate、secDate) –