【发布时间】:2016-10-14 14:40:25
【问题描述】:
Background 是我在 1.6 上使用 databricks csv 读/写器开发的一个简单的 pyspark 程序,一切都很开心。我的数据框有一个时间戳列,它以标准YYYY-MM-DD HH24:MI:SS 格式写出。
foo,bar,2016-10-14 14:30:31.985
现在我使用 Spark 2 在 EMR 上运行它,时间戳列被写入为 以微秒为单位的纪元。这会导致问题,因为目标 (Redshift) 本身无法处理此问题(仅几秒或几毫秒)。
foo,bar,1476455559456000
查看the docs,似乎我应该能够指定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')
【问题讨论】:
标签: csv apache-spark timestamp pyspark emr