Столбец Spark String в массив элементов с классом регистра - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующая строка в столбце искровых данных.

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.

Есть ли какие-либо материалы по этому поводу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...