scala - Spark Scala,获取1列的最大值,但保留所有列
问题描述
我有一个包含 3 列(客户、关联、时间戳)的数据框。
我想customer
通过查看时间戳来获取最新信息。
试图
val rdd = readRdd.select(col("value"))
val val_columns = Seq("value.timestamp").map(x => last(col(x)).alias(x))
rdd.orderBy("value.timestamp")
.groupBy("value.customer")
.agg(val_columns.head, val_columns.tail: _*)
.show()
我相信上面的代码是有效的,但试图弄清楚如何包含所有列(即关联)。如果我理解正确,将其添加到 groupby 将意味着我正在获取客户和关联的最新组合,但我只想从customer
列中获取最新的而不是一起查看多个列。
编辑:
我可能会通过添加:
val val_columns = Seq("value.lastRefresh", "value.associations")
.map(x => last(col(x)).alias(x))
对想法感到好奇。
解决方案
如果您想通过时间戳列返回最新的客户数据,您只需订购您的数据框value.timestamp
并应用limit(1)
:
import org.apache.spark.sql.functions._
df.orderBy(desc("value.timestamp")).limit(1).show()
推荐阅读
- mysql - MySQL 意外关闭。(XAMPP)
- android - 如何在 android studio 中导入或打开 react-native 项目?
- python-3.x - python3奇怪的文件路径问题;代码本身没有错误;纯粹为了知识
- python - 如何在 Pandas 中从列转向行
- bash - 我想重新执行之前使用的第 n 个命令和最后一个名称以 m 开头的命令
- python-3.x - AWS Lambda Python Jinja2 模板从 S3 加载 json
- c++ - 在 file.exe 中的 0x7A2A93B6 (vcruntime140d.dll) 处引发异常:0xC0000005:访问冲突读取位置 0xCDCDCDCD
- substrate - 从 SS58 地址获取公钥
- sql - 如何在 2 个表 oracle 上按分组选择?
- java - Springboot 应用程序中的 Crystal Report - 在 IDE(InteliJ)中运行没有错误,但 bootJar 显示错误