scala - 通过时间戳scala更新数据帧值
问题描述
我有这个数据框
+----------------+-----------------------------+--------------------+--------------+----------------+
|customerid| | event | A | B | C |
+----------------+-----------------------------+--------------------+--------------+----------------+
| 1222222 | 2019-02-07 06:50:40.0 |aaaaaa | 25 | 5025 |
| 1222222 | 2019-02-07 06:50:42.0 |aaaaaa | 35 | 5000 |
| 1222222 | 2019-02-07 06:51:56.0 |aaaaaa | 100 | 4965 |
+----------------+-----------------------------+--------------------+--------------+----------------+
我想按事件(tiemstamp)更新列 C 的值,并在新数据框中仅保留具有最新值更新的行,如下所示
+----------------+-----------------------------+--------------------+--------------+----------------+
|customerid| | event | A | B | C |
+----------------+-----------------------------+--------------------+--------------+----------------+
| 1222222 | 2019-02-07 06:51:56.0 |aaaaaa | 100 | 4965 |
+----------------+-----------------------------+--------------------+--------------+----------------+
数据以流模式进入火花流
解决方案
您可以尝试创建按 customerid 分区的行号并按事件 desc 排序并获取 rownum 为 1 的行。我希望这会有所帮助。
df.withColumn("rownum", row_number().over(Window.partitionBy("customerid").orderBy(col("event").desc)))
.filter(col("rownum") === 1)
.drop("rownum")
推荐阅读
- batch-file - 检查进程是否正在运行,如果超过时间限制则终止它
- c# - 使用 groupdocs 签名 C# 验证数字签名
- javascript - 使用 jQuery setTimeout 在多个元素上更改类以设置时间量
- python - 拥抱脸转换器将 logit 分数转换为概率
- python - 如何在列表中查找特定元素及其'按钮(Selenium Python)
- c++ - 为什么我在调用 if(prim == NULL) 时会出现读取访问冲突
- android - 即时应用程序,立即尝试按钮不会出现在 Play 商店中
- python - 根据另一个数组替换数组元素(有点像 excel vlookup)
- java - 如何在骆驼路线内获得 Hazelcast 地图?
- java - Eclipse 错误:可以从多个模块访问包 javax.xml.namespace:
, java.xml