【问题标题】:Specify format of Timestamp written by pyspark指定 pyspark 编写的 Timestamp 格式
【发布时间】: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


    【解决方案1】:

    原来我查看的文档是针对 2.0.1 的,而我是在 2.0.0 上运行的——而 timestampFormat 是 2.0.1 中的新文档。

    【讨论】:

    • 我也遇到了同样的问题,你知道如何以纪元格式以外的标准格式编写时间戳吗,谢谢。
    • @msounthar 我最终通过在整个工作中将其视为字符串来避免该问题,因为我不需要在处理过程中对其进行操作。
    • 你很幸运!,显然它是 spark 2.0.0 的问题,它已在 2.0.1 中修复,但 EMR 目前仅支持 2.0.0。 github.com/apache/spark/pull/14279
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-06
    • 2015-05-02
    • 2017-11-12
    相关资源
    最近更新 更多