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')
私は同じ問題に直面しています。エポック形式以外の標準形式でタイムスタンプを書く方法を見つけましたか、ありがとうございました。 – msounthar
@msounthar私は処理中にそれを操作する必要がないので、私は仕事を通して文字列として扱うだけで問題を回避しました。 –
Lucky you !,明らかにスパーク2.0.0の問題と2.0.1で修正されましたが、EMRは現在のところ2.0.0しかサポートしていません。 https://github.com/apache/spark/pull/14279 – msounthar