我有两个Dataframe
一个Dataframe中日期列的最大值::一列,一行-df1,列:maxdate
具有日期列::df2列的多个记录:col1、col2、col3..coldate
我要基于df1.maxdate的过滤器df2, df2.colDate > df1.maxdate
如果我指定如下,那么它的工作。
df2.filter(col("colDate").gt(lit(2020-01-01)))
但是,我不能使用df1.maxdate。我正试图用java来实现这个解决方案。
datatype在两个dataframe列中都是date
我正试图通过Spark转换来实现这一点
select * from a
where a.col > (select max(b.col) from b)
在我的例子中
Table a = df2
Table b = df1
2条答案
按热度按时间nxagd54h1#
下面的代码可能会对您有所帮助,
ybzsozfc2#
createTempView
在two dataframes
然后使用sql查询,我们可以过滤出唯一需要的日期。Example:
Option1: using createTempView:
```df1.show()
//+----------+
//| Maxdate|
//+----------+
//|2020-01-01|
//+----------+
df2.show()
//+----------+----+----+
//| colDate|col1|col2|
//+----------+----+----+
//|2020-01-01| A| B|
//|2020-01-03| C| D|
//+----------+----+----+
df1.createOrReplaceTempView("tmp")
df2.createOrReplaceTempView("tmp1")
sql("select * from tmp1 where coldate > (select maxdate from tmp)").show()
//+----------+----+----+
//| colDate|col1|col2|
//+----------+----+----+
//|2020-01-03| C| D|
//+----------+----+----+
```
Option-2:Using dataframe variable:
另一种方法是存储到变量中,然后使用变量,然后在Dataframe中使用变量filter
.df2.crossJoin(df1).
filter(expr("colDate > Maxdate")).
drop("Maxdate").
show()
//+----------+----+----+
//| colDate|col1|col2|
//+----------+----+----+
//|2020-01-03| C| D|
//+----------+----+----+