我在spark dataframe列中有一个以下字符串。
X1|[MODULE1|SYNC|DATE:TIME]|A1|B1|C1|D1|O1|P1|Q1|R1|S1|X2|[MODULE1|SYNC|DATE:TIME]|A2|B2|C2|D2|O2|P2|Q2|R2|S2|X3|[MODULE3|SYNC|DATE:TIME]|A3|B3|C3|D3|O3|P3|Q3|R3|S3
这实际上是三个独立设备X1,X2,X3的设备数据(设备数量可能会有所不同)
X1|[MODULE1|SYNC|DATE:TIME]|A1|B1|C1|D1|O1|P1|Q1|R1|S1|
X2|[MODULE1|SYNC|DATE:TIME]|A2|B2|C2|D2|O2|P2|Q2|R2|S2|
X3|[MODULE3|SYNC|DATE:TIME]|A3|B3|C3|D3|O3|P3|Q3|R3|S3|
这里的设备用case类Device表示:
case class Device(deviceId:String, status:String, a:String, b:String, c:String, ........,s: String)
具有类似于以下的映射。
X1 - deviceId
[MODULE1|SYNC|DATE:TIME] - status
A1 - a
.....
在这种情况下,我编写了一个函数split_device_column
来将字符串拆分为大小为33的Seq [String](大小总是乘以11,取决于设备的数量)。
def split_device_column (s: String): Seq[String] = {...}
X1
[MODULE1|SYNC|DATE:TIME]
A1
B1
C1
D1
O1
P1
Q1
R1
S1
X2
[MODULE1|SYNC|DATE:TIME]
A2
B2
C2
D2
O2
P2
Q2
R2
S2
X3
[MODULE3|SYNC|DATE:TIME]
...
...
S3
我无法找到将此序列转换为case类元素数组的方法。我明白这最有必要进入udf。
关于此的任何输入?