我有下面的实木复合地板文件
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