2017-10-16 16 views
-1

次のようなdatetime列があるとします。私は文字列の列をdatetime型に変換したいので、月、日、年などを抽出できます。Pysparkの文字列列からdatetimeを作成する

+---+------------+ 
|agg| datetime| 
+---+------------+ 
| A|1/2/17 12:00| 
| B|  null| 
| C|1/4/17 15:00| 
+---+------------+ 

私は下に次のコードを試してみましたが、日時の列に返す値は、私は、現時点ではその理由を理解していないヌル、です。

df.select(df['datetime'].cast(DateType())).show() 

そして私もこのコードを試してみました:

df = df.withColumn('datetime2', from_unixtime(unix_timestamp(df['datetime']), 'dd/MM/yy HH:mm')) 

しかし、両者はこのデータフレームを生成:

+---+------------+---------+ 
|agg| datetime|datetime2| 
+---+------------+---------+ 
| A|1/2/17 12:00|  null| 
| B|  null |  null| 
| C|1/4/17 12:00|  null| 

私はすでに読んで、この記事で指定されている解決策を試してみました無用に:PySpark dataframe convert unusual string format to Timestamp

+0

@ user8371915あなたの推論は、投稿を評価しなかった理由を正当化しません。 StackOverFlowを含む複数のソースに5時間を費やし、無駄な解決策を見つけました。あなたが提案した投稿は、私はそれを試していましたが失敗しました。 – MLhacker

+0

こんにちはMLhacker、それが動作する場合、答えとしてそれを受け入れるのですか?ありがとう、私の評判を得るために懸命に努力しています! –

答えて

1
// imports 
import org.apache.spark.sql.functions.{dayofmonth,from_unixtime,month, unix_timestamp, year} 

// Not sure if the datatype of the column is datetime or string 
// I assume the column might be string, do the conversion 
// created column datetime2 which is time stamp 
val df2 = df.withColumn("datetime2", from_unixtime(unix_timestamp(df("datetime"), "dd/MM/yy HH:mm"))) 

+---+------------+-------------------+ 
|agg| datetime|   datetime2| 
+---+------------+-------------------+ 
| A|1/2/17 12:00|2017-02-01 12:00:00| 
| B|  null|    null| 
| C|1/4/17 15:00|2017-04-01 15:00:00| 
+---+------------+-------------------+ 


//extract month, year, day information 
val df3 = df2.withColumn("month", month(df2("datetime2"))) 
    .withColumn("year", year(df2("datetime2"))) 
    .withColumn("day", dayofmonth(df2("datetime2"))) 
+---+------------+-------------------+-----+----+----+ 
|agg| datetime|   datetime2|month|year| day| 
+---+------------+-------------------+-----+----+----+ 
| A|1/2/17 12:00|2017-02-01 12:00:00| 2|2017| 1| 
| B|  null|    null| null|null|null| 
| C|1/4/17 15:00|2017-04-01 15:00:00| 4|2017| 1| 
+---+------------+-------------------+-----+----+----+ 

ありがとう

関連する問題