как перебрать массив [string] в spark scala? - PullRequest
2 голосов
/ 19 февраля 2020

введите описание изображения здесь вот мой пример ввода:

val list=List("a;bc:de;f","uvw:xy;z","123:456")

Я применяю следующую операцию

val upper=list.map(x=>x.split(":")).map(x=>x.split(";"))

но это выдает ошибку- ошибка: разделение значений не является членом массива [String]

Может кто-нибудь помочь, как использовать оба разделения, чтобы я мог получить ответ!

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 20 февраля 2020

Вы можете использовать split с несколькими разделителями в одной итерации карты:

val upper = list.map(x => x.split("[:;]"))

//upper: List[Array[String]] = List(Array(a, bc, de, f), Array(uvw, xy, z), Array(123, 456))
2 голосов
/ 19 февраля 2020

Использование list.map(x=>x.split(":")) даст вам список Array.

upper: List[Array[String]] = List(Array(a;bc, de;f), Array(uvw, xy;z), Array(123, 456))

После сопоставления вы увидите, что элемент будет массивом, в котором вы пытаетесь запустить split.

Вместо этого вы можете использовать flatMap, который сначала даст вам List(a;bc, de;f, uvw, xy;z, 123, 456), а затем вы можете использовать карту для тех предметов, разбивающихся на ;

val upper = list.flatMap(_.split(":")).map(_.split(";"))

Выход

upper: List[Array[String]] = List(Array(a, bc), Array(de, f), Array(uvw), Array(xy, z), Array(123), Array(456))
0 голосов
/ 20 февраля 2020

Вот код, который я пробовал, и он работал:

val upper=list.map(x=>x.split(":")).map(x=>x.map(x=>x.split(";")))

, который дает вывод:

upper: List[Array[Array[String]]] = List(Array(Array(a, bc), Array(de, f)), Array(Array(uvw), Array(xy, z)), Array(Array(123), Array(456)))
...