我正试图从现有的spark数据帧中从列值到列名来设计spark数据框架,但我很长时间都没有得到所需的输出



我有下面这样的数据帧-

tagname    tagvalue            filename
starttime  2022-08-04 10:00:00 abc
endtime    2022-08-04 10:20:00 abc
startime   2022-08-04 10:10:00 xyz
endtime    2022-08-04 10:50:00 xyz

我想要以下格式的

filename starttime           endtime
abc      2022-08-04 10:00:00 2022-08-04 10:20:00
xyz      2022-08-04 10:10:00 2022-08-04 10:50:00

请帮忙?我试了很多方法都不起作用

首先,我们可以在tagvalue上按filename和collect_set进行分组,将其重命名为data

.groupBy("filename").agg(collect_set(col("tagvalue")).as("data"))

编辑:

收集后,通过进行分类

.withColumn("data", array_sort(col("data")))

然后,我们创建两个列,starttimeendttime,如下所示:

.withColumn("starttime", col("data").getItem(0))
.withColumn("endtime", col("data").getItem(1))

我们最终放弃了data,我们的最终结果:

+--------+-------------------+-------------------+
|filename|starttime          |endtime            |
+--------+-------------------+-------------------+
|xyz     |2022-08-04 10:10:00|2022-08-04 10:50:00|
|abc     |2022-08-04 10:00:00|2022-08-04 10:20:00|
+--------+-------------------+-------------------+

这正是你所需要的,祝你好运(你也可以通过文件名asc订购,但我没有这么做(!

最新更新