解決Spark filter過濾條件中使用>=或<=時不識別的問題


一.場景

1     val jldxx_zxzq = jldxx_with_dddf
2       .withColumn("ZXZQ", zxzq(col("CBZQ")))
3       .filter(row => row.getAs("ZXZQ")!= "") // 過濾掉異常數據
4       // 如果存在,過濾掉抄表日期不在當前執行周期內的數據
5       .filter(row => row.getAs("CBRQ") >= row.getAs("ZXZQ").split("_")(0) &&
6         row.getAs("CBRQ") <= row.getAs("ZXZQ").split("_")(1))

二.異常信息

  

三.原因

  是因為使用getAs函數獲取某列的數據時沒有指明具體的類型,導致無法判斷是否支持"<="或 ">="這類的運算符,因而會報錯!

三.解決方案

  使用getAs時指明具體的類型!

  代碼如下:

1 val jldxx_zxzq = jldxx_with_dddf
2       .withColumn("ZXZQ", zxzq(col("CBZQ")))
3       .filter(row => row.getAs("ZXZQ")!= "") // 過濾掉異常數據
4       // 如果存在,過濾掉抄表日期不在當前執行周期內的數據
5       .filter(row => row.getAs[String]("CBRQ") >= row.getAs[String]("ZXZQ").split("_")(0) &&
6         row.getAs[String]("CBRQ") <= row.getAs[String]("ZXZQ").split("_")(1))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM