删除透视pyspark数据框中的重复列

时间:2020-07-22 15:41:10

标签: pyspark

我有下面的实木复合地板文件

Time   source    event field_1 field_2 field_3 .......com_1  com_2...com_n
10:00   device1  ev1    10                            start  1.5     .03
10:00   device1  ev1             1.1                  start  1.0     .01
10:00   device1  ev1                    1.4           start  1.3     .03
10:00   device2  ev1    11                            start  1.5     .23
10:00   device2  ev1             1.3                  start  1.5     .63
10:00   device2  ev1                    1.7           start  1.7     .03

用户只能在field_1,field_2 ..... field_n上查询。应始终显示一些公用列。 时间和来源唯一地标识一行。这里每一行都保存field_1,field_2 ... field_n中一个字段的值。因此,我明智地保存了这些行。

我是pyspark的新手。我正在使用pyspark查询镶木地板。

df4 = df1.selectExpr("Time", "event", "source", "ValueType", "field_2", "field_3"
                         ).groupBy("Time", "EVENT").pivot("device").agg(first("field_2"),
                                                                        first("field_3"),
                                                                        first('com1'),
first('com2'), first('comn'))

我在上面的一个上面试过。它部分地解决了我的问题。即我得到

device1_first(field_2, false), device1_first(field_3, false), device2_first(field_2,false), device2_first(field_3 ,false)

作为列,但我也得到device1_first(com_1, false), device2_first(com_1, false)...

由于“来源”的枢纽,此处是通用字段重复编号设备的时间。

我不知道如何使公共字段不重复使用设备,而仅以正确的值作为列出现。

让我们考虑用户对名为field_2和field_3的字段的查询

预期输出

Time   source    event field_2  field_3 com_1  com_2...com_n
10:00   device1  ev1    1.1             start  1.0     .01
10:00   device1  ev1            1.4     start  1.3     .03
10:00   device2  ev1    1.3             start  1.5     .63
10:00   device2  ev1            1.7     start  1.7     .03

0 个答案:

没有答案