scala - 在scala DataFrame中的单行中查找不同列的最大值
问题描述
我试图从 scala 数据框中的单行中的不同列中找出最大值。
数据框中可用的数据如下。
+-------+---------------------------------------+---------------------------------------+---------------------------------------+
| NUM| SIG1| SIG2| SIG3|
+-------+---------------------------------------+---------------------------------------+---------------------------------------+
|XXXXX01|[{"TIME":1569560531000,"VALUE":3.7825}]|[{"TIME":1569560531001,"VALUE":4.7825}]|[{"TIME":1569560531002,"VALUE":2.7825}]|
|XXXXX01|[{"TIME":1569560541001,"VALUE":1.7825}]|[{"TIME":1569560541000,"VALUE":8.7825}]|[{"TIME":1569560541003,"VALUE":5.7825}]|
|XXXXX01|[{"TIME":1569560531000,"VALUE":3.7825}]|[{"TIME":1569560531009,"VALUE":3.7825}]| null |
|XXXXX02|[{"TIME":1569560531000,"VALUE":5.7825}]|[{"TIME":1569560531007,"VALUE":8.7825}]|[{"TIME":1569560531006,"VALUE":3.7825}]|
|XXXXX02|[{"TIME":1569560531000,"VALUE":9.7825}]|[{"TIME":1569560531009,"VALUE":1.7825}]|[{"TIME":1569560531010,"VALUE":3.7825}]|
架构是
scala> DF.printSchema
root
|-- NUM: string (nullable = true)
|-- SIG1: string (nullable = true)
|-- SIG2: string (nullable = true)
|-- SIG3: string (nullable = true)
预期输出如下。
+-------+--------------+----------+------------+------------+
| NUM| TIME | SIG1| | SIG2 | SIG3 |
+-------+--------------+----------+------------+------------+
|XXXXX01| 1569560531002| 3.7825 | 4.7825 | 2.7825 |
|XXXXX01| 1569560541003| 1.7825 | 8.7825 | 5.7825 |
|XXXXX01| 1569560531009| 3.7825 | 3.7825 | null |
|XXXXX02| 1569560531007| 5.7825 | 8.7825 | 3.7825 |
|XXXXX02| 1569560531010| 9.7825 | 1.7825 | 3.7825 |
我需要从单行和 SIG 列中添加一个具有最高 TIME 的新列,仅包含它们的值。
基本上,每列中的 TIME 将被该行中可用的最高 TIME 值替换,并分解 TIME 和 VALUE。
是否有任何UDF/功能来实现这一点?提前致谢。
解决方案
使用get_json_object
函数从存储为字符串的 json 中提取值。
然后就很简单了:
DF.withColumn("TIME", greatest(get_json_object('SIG1, "$[0].TIME"),
get_json_object('SIG2, "$[0].TIME"),
get_json_object('SIG3, "$[0].TIME")))
.withColumn("SIG1", get_json_object('SIG1, "$[0].VALUE"))
.withColumn("SIG2", get_json_object('SIG2, "$[0].VALUE"))
.withColumn("SIG3", get_json_object('SIG3, "$[0].VALUE"))
.show
推荐阅读
- python - OpenCV - Yolo - 计算特定区域中检测到的对象
- python - 使用谷歌云 APIi 将 Icecast 流式传输到文本
- r - 在 R 中表达变量
- hadoop - 如何从中心点终止 apache Impala 2.10 中正在运行的查询
- javascript - 在 Angular 4+ 中插入数据的最佳方法
- dask-distributed - 如何将任务分配给 Dask.Distributed 中的特定工作人员
- maven - Maven 测试不与外部 Jar 一起运行
- tensorflow - 了解检测 API 配置文件
- apache-spark - 无法访问通过 Google dataproc 集群上的 Airflow 提交的 PySpark 作业中的环境变量
- r - 在 R 中使用遗传算法进行逐步种群评估