首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将最新日期从火花数据格式中的一系列行中删除。

将最新日期从火花数据格式中的一系列行中删除。
EN

Stack Overflow用户
提问于 2022-07-19 19:35:40
回答 2查看 64关注 0票数 0

我有以下数据:

代码语言:javascript
复制
+----------+----------+--------------------+--------------------+---------+
|  fs_date |   ss_date|       request      |            response|full_date|
+----------+----------+--------------------+--------------------+---------+
|2022-06-01|2022-06-02|[[[TLV, NYC, 2022...|[[[false, [1262.1...|2022-5-25|
|2022-06-01|2022-06-03|[[[TLV, NYC, 2022...|[[[false, [1226.6...|2022-5-28|
|2022-06-01|2022-06-03|[[[TLV, NYC, 2022...|[[[false, [3746.6...|2022-5-28|
|2022-06-01|2022-06-04|[[[TLV, NYC, 2022...|[[[false, [878.63...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [777.81...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [746.58...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [777.81...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [695.28...|2022-5-26|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [593.63...|2022-5-25|
|2022-06-01|2022-06-06|[[[TLV, NYC, 2022...|[[[false, [687.28...|2022-5-29|
|2022-06-01|2022-06-06|[[[TLV, NYC, 2022...|[[[false, [687.28...|2022-5-28|
|2022-06-01|2022-06-06|[[[TLV, NYC, 2022...|[[[false, [687.28...|2022-5-28|
|2022-06-01|2022-06-06|[[[TLV, NYC, 2022...|[[[false, [687.38...|2022-5-26|
|2022-06-01|2022-06-06|[[[TLV, NYC, 2022...|[[[false, [789.88...|2022-5-25|

对于每个日期组合,我希望只有最新的答复(由“完整日期”)。

例如,对于\x{e76f}2022-06-01\2022-06-05\x{e76f},我只想得到2022-5-29的答复。

2022-06-01=2022-06-03,只有2022-5-28,等等.

预期产出:

代码语言:javascript
复制
+----------+----------+--------------------+--------------------+---------+
|  fs_date |   ss_date|       request      |            response|full_date|
+----------+----------+--------------------+--------------------+---------+
|2022-06-01|2022-06-02|[[[TLV, NYC, 2022...|[[[false, [1262.1...|2022-5-25|
|2022-06-01|2022-06-03|[[[TLV, NYC, 2022...|[[[false, [1226.6...|2022-5-28|
|2022-06-01|2022-06-03|[[[TLV, NYC, 2022...|[[[false, [3746.6...|2022-5-28|
|2022-06-01|2022-06-04|[[[TLV, NYC, 2022...|[[[false, [878.63...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [777.81...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [746.58...|2022-5-29|
|2022-06-01|2022-06-05|[[[TLV, NYC, 2022...|[[[false, [777.81...|2022-5-29|
|2022-06-01|2022-06-06|[[[TLV, NYC, 2022...|[[[false, [687.28...|2022-5-29|

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-19 20:03:39

这是一个很好的例子,说明何时使用窗口函数--一个可以在聚合中操作的函数。

代码语言:javascript
复制
date_window = W.partitionBy(["fs_date", "ss_date"]).orderBy(F.col("full_date").desc())
df2 = (
    df.withColumn("row", F.dense_rank().over(date_window))
    .filter(F.col("row") == 1).drop("row")
)

我们创建一个分区来定义我们将要使用的窗口,然后执行一个dense_rank (它将在full_date中对值进行排序,同时在有领带的地方重复数字),然后过滤顶级的行并删除我们的窗口列。

票数 1
EN

Stack Overflow用户

发布于 2022-07-19 20:00:23

假设您的表名为data,那么首先创建另一个表,我们在其中按fs_datess_date分组,然后在full_date上进行最大聚合。这样我们就可以获得具有最大full_date值的所有行:

代码语言:javascript
复制
val otherOne = data.groupBy("fs_date", "ss_date").agg(max("full_date").as("full_date"))

在这一步之后,我们再次将inner与主表连接(这样我们就可以过滤掉不需要的行),如下所示:

代码语言:javascript
复制
data.join(otherOne, Seq("fs_date", "ss_date", "full_date"), "inner")
  .orderBy("fs_date", "ss_date") // for the sake of matching results

这应该能给你你想要的!这个解决方案是在Scala中完成的,但我希望您了解这个想法。

输出的样本结果(也有样本输入数据):

代码语言:javascript
复制
+----------+----------+---------+-------+--------+
|   fs_date|   ss_date|full_date|request|response|
+----------+----------+---------+-------+--------+
|2022-06-01|2022-06-03|2022-5-28|      R|       R|
|2022-06-01|2022-06-03|2022-5-28|      R|       R|
|2022-06-01|2022-06-04|2022-5-29|      R|       R|
|2022-06-01|2022-06-05|2022-5-29|      R|       R|
|2022-06-01|2022-06-05|2022-5-29|      R|       R|
|2022-06-01|2022-06-05|2022-5-29|      R|       R|
|2022-06-01|2022-06-06|2022-5-29|      R|       R|
+----------+----------+---------+-------+--------+
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73042588

复制
相关文章

相似问题

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