вы не можете сравнить время, когда оно находится в строке. Pyspark предлагает API для преобразования строк в метку времени: https://spark.apache.org/docs/2.4.0/api/python/pyspark.sql.html?highlight=to_timestamp#pyspark. sql .functions.to_timestamp С его помощью вы сможете преобразовать свой столбец как dateType, а затем выполнять сравнения.
Попробуйте.
В вашем случае вы используете 12-часовой формат (чч), здесь допустимые значения 1-12 согласно SimpleDateFormat, который использует искра. Обратитесь к https://docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html
Поэтому, если вам нужен 24-часовой формат, измените строку часа на HH
Поскольку вы даете 00 в hh, он становится недействительным. Приведенный ниже код работает. Также будьте осторожны с форматом, который вы указываете, и форматом строки. если есть несоответствие, то вы получите null.
import pyspark.sql.functions as F
tst=sqlContext.createDataFrame([('Ram','01-Jan-2000 01.00.00.001 AM'),('Tom','01-Jan-2020 11.00.00.001 AM'),('Ali',' 01-Jan-2010 07.00.00.001 AM')],schema=["Name","DOJ"])
tst1=tst.withColumn("ts",F.to_timestamp(F.col("DOJ"),format="dd-MMM-yyyy hh.mm.ss.SSS aa"))
#%%
tst2 =tst1.filter(F.col('ts')>F.to_timestamp(F.lit("01-Jan-2005 01.00.00.001 AM"),format="dd-MMM-yyyy hh.mm.ss.SSS aa"))
результаты:
|Name|DOJ |ts |
+----+----------------------------+-------------------+
|Tom |01-Jan-2020 11.00.00.001 AM |2020-01-01 11:00:00|
|Ali | 01-Jan-2010 07.00.00.001 AM|2010-01-01 07:00:00|
+----+----------------------------+-------------------+