【问题标题】:filter date column records in pySpark dataframe过滤pySpark数据框中的日期列记录
【发布时间】:2020-01-30 19:24:04
【问题描述】:

我的输入数据采用以下格式,即 dataframe df_date

col1, col2, extraction_date, col3
010, DSL, 20191201235900, VDRAC
010, DSL, 20191203235900, VDRAC
010, DSL, 20191205235900, VDRAC
010, DSL, 20200120235900, VDRAC
010, DSL, 20200128235900, VDRAC
010, DSL, 20200129235900, VDRAC
010, DSL, 20200129235900, VDRAC
(string, string, bitint(longtype), string) # I have added the data type of each column for reference)

当我想处理旧日期时,只考虑 29 日之前的记录。我需要过滤它并需要应用业务条件。

import datetime
var = '28-01-2020'
ref_date = datetime.datetime.strptime(var, '%d-%m-%Y').date()   #converting input ref date arg to date format
df_fil_date = df_data.filter(df_date.extraction_date.leq(ref_date))

显示错误,因为来自源的提取日期是 long_type (bitint),而 ref_date 变量是日期格式。

能否请您检查并告诉我如何根据传递的日期变量过滤数据?

【问题讨论】:

    标签: pyspark pyspark-dataframes


    【解决方案1】:

    您需要将该列转换为日期类型才能对其他日期列进行任何类型的检查。

    clm_name = 'extraction_date'
    input_format = 'yyyyMMddHHmmss'
    outputformat = 'MM-dd-yyyy HH:mm:ss'
    df_data = df_data.withColumn(clm_name, (unix_timestamp( df_data[extraction_date], input_format )))
    df_data = df_data.withColumn(clm_name, from_unixtime( df_data[extraction_date], outputformat))
    df_data = df_data.withColumn(clm_name, to_timestamp( df_data[clm_name], outputformat).cast('date'))
    

    您可以使用'timestamp' 而不是转换为'date',以便在转换期间不会丢失时间信息,但是您将需要另一列的类型为'timestamp'。 要过滤日期,

    var = '2020-01-28'
    df_fil_date = df_data.filter(df_date.extraction_date < lit(var).cast('date'))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-19
      • 2019-03-07
      • 1970-01-01
      • 2021-12-08
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      相关资源
      最近更新 更多