Spark 1.6.2中Timestamp列过滤无输出问题求助
解决Spark 1.6.2日期过滤无输出的问题
嘿,我来帮你排查下这个问题~先还原下你的需求和遇到的情况:
我需要过滤掉
date_time_begin小于起始日期的行,尝试以下代码却未得到输出,使用的是Spark 1.6.2版本filterddata = joindedf.filter(joindedf("date_time_begin").gt(lit("str_date"))) filterddata.show()
出现无输出的情况,大概率是过滤条件存在问题,结合Spark 1.6.2的特性,我整理了几个关键点和修复方案:
检查变量引用是否正确
你代码里写的lit("str_date")是把字符串字面量"str_date"传入,但我猜str_date应该是你定义的起始日期变量(比如类似str_date = "2024-01-01"),这时候不能加引号,要直接写lit(str_date),不然Spark会把"str_date"当成日期字符串去比较,自然匹配不到数据。确保日期类型一致
Spark里日期类型(Date/Timestamp)和字符串直接比较容易出问题,建议先确认date_time_begin的字段类型:joindedf.printSchema()如果
date_time_begin是Timestamp/Date类型,要把str_date转换成对应的类型再比较,比如用unix_timestamp(Spark 1.6版本的常用转换方式):from pyspark.sql.functions import unix_timestamp, lit # 假设str_date是"yyyy-MM-dd HH:mm:ss"格式的字符串 start_ts = unix_timestamp(lit(str_date), "yyyy-MM-dd HH:mm:ss").cast("timestamp") filterddata = joindedf.filter(joindedf("date_time_begin") > start_ts) filterddata.show()如果
date_time_begin是字符串类型,要确保它和str_date的格式完全一致(比如都是"yyyy-MM-dd")再做字符串比较,但这种方式不如转成日期类型可靠。排查空值问题
可以先查看date_time_begin字段有没有空值,空值会导致过滤条件不匹配:joindedf.filter(joindedf("date_time_begin").isNull()).count()如果有空值,可以在过滤时加上非空判断:
filterddata = joindedf.filter(joindedf("date_time_begin").isNotNull() & joindedf("date_time_begin").gt(lit(str_date)))
内容的提问来源于stack exchange,提问作者vijayaragavan
相关产品推荐
相关产品推荐

