2016-10-14 3 views
2

背景は、私が1.6で開発した単純なpysparkプログラムで、databricks csvの読み書き機を使用していて、すべてが幸せだった。私のデータフレームには、標準YYYY-MM-DD HH24:MI:SS形式で書かれたタイムスタンプ列がありました。pysparkで書かれたタイムスタンプの書式を指定する

foo,bar,2016-10-14 14:30:31.985 

は、今私は、Spark 2とEMR上でそれを実行している、とタイムスタンプ列は、マイクロでエポックとして書かれています。ターゲット(Redshift)がこれをネイティブに処理できないため(秒またはミリ秒のみ)、問題が発生します。 the docsを見ると

foo,bar,1476455559456000 

、私がtimestampFormatで使用する形式を指定することができるはずですようだが、私はエラーを取得する:

TypeError: csv() got an unexpected keyword argument 'timestampFormat' 

私はこの間違ったを呼び出し、またはオプションにはないアム存在する?

df = sqlContext.createDataFrame([('foo','bar')]).withColumn('foo',pyspark.sql.functions.current_timestamp()) 
df.printSchema() 
df.show() 

# Use the new Spark 2 native method 
df.write.csv(path='/tmp/foo',mode='overwrite') 

# Use the databricks CSV method, pre Spark 2 
df.write.save(path='/tmp/foo2',format='com.databricks.spark.csv',mode='overwrite') 

答えて

0
:きれいに再現する ないマイクロ秒(ミリは本当に罰金、または任意の他の標準時刻形式になります)


シンプルなコードだ形式のうち、私のタイムスタンプデータを取得するための他の方法

私が見たドキュメントは2.0.1であったのに対し、私は2.0.0で動作していましたが、timestampFormatは2.0.1で新しくなっています。

+0

私は同じ問題に直面しています。エポック形式以外の標準形式でタイムスタンプを書く方法を見つけましたか、ありがとうございました。 – msounthar

+0

@msounthar私は処理中にそれを操作する必要がないので、私は仕事を通して文字列として扱うだけで問題を回避しました。 –

+0

Lucky you !,明らかにスパーク2.0.0の問題と2.0.1で修正されましたが、EMRは現在のところ2.0.0しかサポートしていません。 https://github.com/apache/spark/pull/14279 – msounthar

関連する問題