我有一个场景,其中dataframe具有data_date,如下所示
root
|-- data_date: timestamp (nullable = true)
+-------------------+
| data_date|
+-------------------+
|2009-10-19 00:00:00|
|2004-02-24 00:00:00|
+-------------------+
我需要在两个日期之间过滤数据,即'01 -Jan-2017'和'31 -dec-2017'之间的data_date
我试过很多方法
df.where(col("data_date") >= "2017-01-01" )
df.filter(col("data_date").gt("2017-01-01"))
df.filter(col("data_date").gt(lit("2017-01-01"))).filter(col("data_date").lt("2017-12-31")
但没有任何效果。
我收到以下错误:
java.lang.AssertionError: assertion failed: unsafe symbol Unstable (child of ) in runtime reflection universe
at scala.reflect.internal.Symbols$Symbol.<init>(Symbols.scala:205)
at scala.reflect.internal.Symbols$TypeSymbol.<init>(Symbols.scala:3030)
at scala.reflect.internal.Symbols$ClassSymbol.<init>(Symbols.scala:3222)
at scala.reflect.internal.Symbols$StubClassSymbol.<init>(Symbols.scala:3522)
at scala.reflect.internal.Symbols$class.newStubSymbol(Symbols.scala:191)
at scala.reflect.internal.SymbolTable.newStubSymbol(SymbolTable.scala:16)\
我该如何解决?
您需要将文字值转换为“date”数据类型。BTW ..输入不在您指定的条件之间。看一下这个:
scala> val df = Seq(("2009-10-19 00:00:00"),("2004-02-24 00:00:00")).toDF("data_date").select('data_date.cast("timestamp"))
df: org.apache.spark.sql.DataFrame = [data_date: timestamp]
scala> df.printSchema
root
|-- data_date: timestamp (nullable = true)
scala> df.withColumn("greater",'data_date.gt(lit("2017-01-01").cast("date"))).withColumn("lesser",'data_date.lt(lit("2017-12-31").cast("date"))).show
data_date | greater | lesser |
---|---|---|
2009-10-19 00:00:00 | false | true |
2004-02-24 00:00:00 | false | true |
scala>
如果我更改输入如下,过滤器工作。
val df = Seq(("2017-10-19 00:00:00"),("2017-02-24 00:00:00")).toDF("data_date").select('data_date.cast("timestamp"))
val df2= df.withColumn("greater",'data_date.gt(lit("2017-01-01").cast("date"))).withColumn("lesser",'data_date.lt(lit("2017-12-31").cast("date")))
df2.filter("greater and lesser ").show(false)
data_date | greater | lesser |
---|---|---|
2017-10-19 00:00:00 | true | true |
2017-02-24 00:00:00 | true | true |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。