【问题标题】:How to specify date format (DateType) when defining pyspark schema?定义pyspark架构时如何指定日期格式(DateType)?
【发布时间】:2020-10-01 09:57:40
【问题描述】:

我有一个 python 应用程序,它可以将文档解析为字典格式 (JSON),其中包含时间信息等。该文档有一个字符串,此时格式为 '%Y-%m-%d%H.%M.%S',我使用 strptime 函数将其转换为日期时间对象。

然后将所有信息转换为 PySpark DataFrame,以便将其保存为 MongoDb 集合。

问题是,当我将字典转换为 DataFrame 时,我会丢失小时、分钟和秒信息,最终只将“2020-05-29 00:00:00.000z”保存到 Mongo 集合中,但我需要hh,mm 和 ss 以便稍后过滤。可能会发生什么?

这就是我正在做的:

日期:

date = datetime.datetime.strptime(
                    date.decode('utf-8'), '%Y-%m-%d%H.%M.%S')

每个字典项都是这样的,并存储在一个称为记录的列表中:

{'name': 'Contrato', 'fecha': date, 'origin': 'input'}

我为 Dataframe 创建的架构:

schema = StructType([
    StructField('name', StringType(), True),
    StructField('fecha', DateType(), True),
    StructField('origin', BooleanType(), True)
])

然后我打电话:

spark.createDataFrame(records, schema)

当我打印 DF 时,我得到了这个:

当我将它加载到 Mongo 时,它总是显示没有小时、分钟或秒:

提前致谢!

【问题讨论】:

  • 您能否添加一些初始日期字符串的示例?顺便说一句,DateType() 只保存日期。
  • @cronoik 通过将其更改为 TimestampType() 来修复它。谢谢!

标签: python json mongodb dataframe pyspark


【解决方案1】:

我通过将 DateType() 更改为 TimestampType() 来修复它。现在完美运行!

schema = StructType([
StructField('name', StringType(), True),
StructField('fecha', TimestampType(), True),
StructField('origin', BooleanType(), True)
])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多