2017-03-20 21 views
0

タイムスタンプの値を日付と時刻に分割したい。タイムスタンプの列を日付と時刻に分割する方法

例:SQLを使用して

1/20/2016 3:20:30 PM 
1/20/2016 3:20:31 PM 
1/20/2016 3:20:32 PM 
1/20/2016 3:20:32 PM 
1/20/2016 3:20:32 PM 
1/20/2016 3:20:33 PM 
1/20/2016 3:20:34 PM 
1/20/2016 3:20:34 PM 

ニーズ2016年1月20日に分割すると3時20分30秒PM

は私が正しく

split_col = pyspark.sql.functions.split(df['ServerTime'], ' ') 
df_date = df.withColumn('Date', split_col.getItem(0)) 
df_time = df.withColumn('Time', split_col.getItem(1)) 
をそれを処理することができません機能をこぼしました

ヘルプユーザー

+0

どのようなエラーがありますか? –

答えて

1

pyspark.sql.functions.concatを使用して、関連する時間ビットを再度連結することができます。のは、最初のいくつかのテストデータを作成してみましょう:

df = sc.parallelize([('1/20/2016 3:20:30 PM',), 
        ('1/20/2016 3:20:31 PM',), 
        ('1/20/2016 3:20:32 PM',)]).toDF(['ServerTime'])  

あなたがこれを行うことができます:df_time.show()を実行した後

import pyspark.sql.functions as F 
split_col = pyspark.sql.functions.split(df['ServerTime'], ' ') 
df_date = df.withColumn('Date', split_col.getItem(0)) 
df_time = df.withColumn('Time', F.concat(split_col.getItem(1),F.lit(' '),split_col.getItem(2))) 

を、次のような出力が返されます。

+--------------------+----------+ 
|   ServerTime|  Time| 
+--------------------+----------+ 
|1/20/2016 3:20:30 PM|3:20:30 PM| 
|1/20/2016 3:20:31 PM|3:20:31 PM| 
|1/20/2016 3:20:32 PM|3:20:32 PM| 
+--------------------+----------+ 

df_date.show()リターンを実行します

+--------------------+---------+ 
|   ServerTime|  Date| 
+--------------------+---------+ 
|1/20/2016 3:20:30 PM|1/20/2016| 
|1/20/2016 3:20:31 PM|1/20/2016| 
|1/20/2016 3:20:32 PM|1/20/2016| 
+--------------------+---------+ 
+0

"1/1/2016 3:20:30 PM"や "1/20/2016 11:20:30 PM"のような日付の時間には動作しません –

+0

はい、そうです、私は答えを修正しました。 – Jaco

1

日付と時刻はどのような形式でもかまいません。これを行う正しい方法は、日付文字列をDatetype()に変換し、そこから日付と時刻の部分を抽出することです。

は、以下のサンプルデータ

server_times = sc.parallelize([('1/20/2016 3:20:30 PM',), 
        ('1/20/2016 3:20:31 PM',), 
        ('1/20/2016 3:20:32 PM',)]).toDF(['ServerTime']) 

任意の形式を次のように部品を抽出することができ時間

を見てみましょう。

from pyspark.sql.functions import unix_timestamp, from_unixtime, date_format 

df.select(unix_timestamp(df.ServerTime, 'm/d/yyyy h:m:ss a').alias('ut'))\ 
    .select(from_unixtime('ut').alias('dty'))\ 
    .select(date_format('dty', 'M/d/yyyy').alias('Date'), 
      date_format('dty', 'h:m:s a').alias('Time'))\ 
    .show() 

+---------+----------+ 
|  Date|  Time| 
+---------+----------+ 
|1/20/2016|3:20:30 PM| 
|1/20/2016|3:20:31 PM| 
|1/20/2016|3:20:32 PM| 
+---------+----------+ 

必要に応じて、これらの2つを別々のデータフレームに投影できます。

関連する問題