首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于日期的火花数据过滤

基于日期的火花数据过滤
EN

Stack Overflow用户
提问于 2015-08-13 17:39:57
回答 7查看 184.7K关注 0票数 54

我有一份数据

代码语言:javascript
运行
复制
date, string, string

我想在某个时间段之前选择日期。我在没有运气的情况下尝试了下面的方法

代码语言:javascript
运行
复制
 data.filter(data("date") < new java.sql.Date(format.parse("2015-03-14").getTime))

我收到一个错误,说明了以下内容

代码语言:javascript
运行
复制
org.apache.spark.sql.AnalysisException: resolved attribute(s) date#75 missing from date#72,uid#73,iid#74 in operator !Filter (date#75 < 16508);

据我所知,查询是不正确的。有人能告诉我应该以什么方式格式化查询吗?

我检查过数据仓库中的所有企业都有价值--它们有价值。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-09-22 18:31:20

以下解决方案适用于 since 1.5

低于:

代码语言:javascript
运行
复制
// filter data where the date is lesser than 2015-03-14
data.filter(data("date").lt(lit("2015-03-14")))      

大于:

代码语言:javascript
运行
复制
// filter data where the date is greater than 2015-03-14
data.filter(data("date").gt(lit("2015-03-14"))) 

对于相等,您可以使用equalTo===

代码语言:javascript
运行
复制
data.filter(data("date") === lit("2015-03-14"))

如果DataFrame date列的类型为StringType,则可以使用to_date函数对其进行转换:

代码语言:javascript
运行
复制
// filter data where the date is greater than 2015-03-14
data.filter(to_date(data("date")).gt(lit("2015-03-14"))) 

您还可以使用year函数根据一年进行过滤:

代码语言:javascript
运行
复制
// filter data where year is greater or equal to 2016
data.filter(year($"date").geq(lit(2016))) 
票数 84
EN

Stack Overflow用户

发布于 2019-01-02 15:10:34

不要像其他答案所建议的那样使用这个

代码语言:javascript
运行
复制
.filter(f.col("dateColumn") < f.lit('2017-11-01'))

但是用这个代替

代码语言:javascript
运行
复制
.filter(f.col("dateColumn") < f.unix_timestamp(f.lit('2017-11-01 00:00:00')).cast('timestamp'))

这将使用TimestampType而不是StringType,后者在某些情况下将具有更高的性能。例如,Parquet谓词下推只适用于后者。

编辑:这两个片段都假定此导入:

代码语言:javascript
运行
复制
from pyspark.sql import functions as f
票数 21
EN

Stack Overflow用户

发布于 2020-04-29 06:21:28

我发现最易读的表达方式是使用sql表达式:

代码语言:javascript
运行
复制
df.filter("my_date < date'2015-01-01'")

我们可以通过查看.explain()中的物理计划来验证此操作是否正确。

代码语言:javascript
运行
复制
+- *(1) Filter (isnotnull(my_date#22) && (my_date#22 < 16436))
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31994997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档