У меня есть следующая строка в столбце искровых данных.
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|
Здесь устройство представлено с классом дела 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
, чтобы разделить строку на Seq [String] размера 33 в этом случае (Размер всегда будет умножаться на 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.
Есть ли какие-либо материалы по этому поводу?