【问题标题】:Check date format is DD-MMM-YYYY检查日期格式为 DD-MMM-YYYY
【发布时间】:2021-08-17 20:03:26
【问题描述】:

例如,我有以下 pyspark 数据框。我想在数据框中验证值是否为 'dd-mmm-yyyy' 格式并且显示通过具有状态或显示状态失败。

我尝试使用以下代码,但失败并出现错误 to_date is not defined。有关获得此通过和失败状态的任何输入

df.select(c,F.when(to_date(tsrcreateddate, 'dd-mmm-yyyy') ,"pass").otherwise("fail").alias("Check"))

【问题讨论】:

  • 你确定函数 to_date 是正确的吗?或者是 Pandas 函数 pd.to_datetime()?您可以检查: import pandas as pd, value = pd.to_datetime('30-05-2021', format='%d-%m-%Y', errors='ignore')
  • 是的 to_date 是正确的。我错过了 F.to_date。现在出现新错误::CaseWhen 中的 WHEN 表达式都应该是布尔类型,但第一个表达式的类型是 to_date

标签: python pyspark


【解决方案1】:

看看下面的代码是否符合你的要求:

import datetime

date_string = '30-5-2021'
format = '%d-%m-%Y'

try:
  datetime.datetime.strptime(date_string, format)
  print(date_string + " is a date in with correct format.")
except ValueError:
  print(date_string + " does not have correct format")

【讨论】:

    【解决方案2】:

    我能够使用以下代码找到解决方案。

    from pyspark.sql.functions import *
    import pyspark.sql.functions as F
    
    # Create SparkSession
    
    data=[["1","2020-02-01"],["2","2019-03-01"],["3","2021-03-01"],["4",""],["5","2021-21-01"],["6","1900-01-01"]]
    df=spark.createDataFrame(data,["id","input"])
    df.show()
    
    c='input'
    df1= df.select(c,F.when(F.col(c).rlike("^(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$") ,"pass").otherwise("fail").alias("Check"))
    df1.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-14
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多