与えられたデータフレーム:
+-----------------+---------+-----------------+
| user_id| id| date|discount|year|
+-----------------+---------+-----------------+
| 44143827|118775509| 20180103| 0.0|2018|
| 16445775|118841685| 20180105| 0.0|2018|
| 25230573|119388676| 20180111| 0.0|2018|
| 44634333|119537508| 20180112| 0.0|2018|
この日付をyyyyMMddからyyyy-MM-ddに変換したいと思います。私は単一の値に対してこれを実行することができますが、
scala> val x = "20180918"
x: String = 20180918
scala> x.patch(4,"-",0)
res76: String = 2018-0918
scala> x.patch(4,"-",0).patch(7,"-",0)
res77: String = 2018-09-18
しかし、完全なデータセットを把握することはできませんでした。誰か助けてください。
date_format()およびto_timestamp()関数を使用します。これをチェックしてください:
scala> val df = Seq((20180103),(20180105)).toDF("dt")
df: org.apache.spark.sql.DataFrame = [dt: int]
scala> df.withColumn("dt",'dt.cast("string")).withColumn("dt",date_format(to_timestamp('dt,"yyyyMMdd"),"yyyy-MM-dd")).show(false)
+----------+
|dt |
+----------+
|2018-01-03|
|2018-01-05|
+----------+
scala>
date_formatは文字列を返すことに注意してください。日付データ型で必要な場合は、
scala> val df2 = df.withColumn("dt",'dt.cast("string")).withColumn("dt",date_format(to_timestamp('dt,"yyyyMMdd"),"yyyy-MM-dd"))
df2: org.apache.spark.sql.DataFrame = [dt: string]
scala> df2.printSchema
root
|-- dt: string (nullable = true)
scala> val df3 = df2.withColumn("dt",'dt.cast("date"))
df3: org.apache.spark.sql.DataFrame = [dt: date]
scala> df3.printSchema
root
|-- dt: date (nullable = true)
scala> df3.show(false)
+----------+
|dt |
+----------+
|2018-01-03|
|2018-01-05|
+----------+
scala>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加