2017-12-07 7 views
0

私はPySpark DataframeのPythonで2つの列を減算しようとしています。私はそれをやっている問題がたくさんあります。私はタイムスタンプとして列の型を持っていて、列はdate1 = 2011-01-03 13:25:59で、コラムdate2 = 2011-01-03 13:27:00はので、私はdate2 - date1したいと私は PySpark Pythonで2つの日付列を引く

PySaprk

でこれを行うことができますどのような timeDiff = 00:01:01

として、これらの両方の列の違いを示して別々timediff列、それらのデータフレームの列からとなって、私は次のコードを試してみました:

#timeDiff = df.withColumn(('timeDiff', col(df['date2']) - col(df['date1']))) 

このコードは、私はこの単純なことやってみました

動作しませんでした:これは、実際に働いていた

timeDiff = df['date2'] - df['date1'] 

を、が、その後私は、次の作品で私のデータフレームに、この別々の列を追加しようとしましたコード

df = df.withColumn("Duration", timeDiff) 

ではfollwingエラーを有している:

Py4JJavaError: An error occurred while calling o107.withColumn. 
: org.apache.spark.sql.AnalysisException: cannot resolve '(`date2` - `date1`)' due to data type mismatch: '(`date2` - `date1`)' requires (numeric or calendarinterval) type, not timestamp;; 

いずれか他の方法で私を助けることができますか、このエラーを解決する方法はありますか?

答えて

1

希望します。

from pyspark.sql.functions import unix_timestamp 

#sample data 
df = sc.parallelize([ 
    ['2011-01-03 13:25:59', '2011-01-03 13:27:00'], 
    ['2011-01-03 3:25:59', '2011-01-03 3:30:00'] 
]).toDF(('date1', 'date2')) 

timeDiff = (unix_timestamp('date2', "yyyy-MM-dd HH:mm:ss") - unix_timestamp('date1', "yyyy-MM-dd HH:mm:ss")) 
df = df.withColumn("Duration", timeDiff) 
df.show() 

出力は次のとおりです。

+-------------------+-------------------+--------+ 
|    date1|    date2|Duration| 
+-------------------+-------------------+--------+ 
|2011-01-03 13:25:59|2011-01-03 13:27:00|  61| 
| 2011-01-03 3:25:59| 2011-01-03 3:30:00|  241| 
+-------------------+-------------------+--------+ 
+0

そんなにこれが働いて、ありがとうございます。 – id101112

+0

それは助けて嬉しい:) – Prem

関連する問題