Как разделить элементы массива на отдельные столбцы в Spark?

+---------------------------+
|address                    |
+---------------------------+
|[San Jone, 19422, CA, 126]|
|[Queens, 11372, NY, 5543]  |
+---------------------------+

Как разделить один столбец на 4, если значение внутри находится в массиве?

Ожидаемый результат:

+-----------------------------+
|city    | Zip  |state|street |
+-----------------------------+
|San Jose| 19422| CA  |126    |
|Queens  | 11372| NY  |5543   |
+-----------------------------+

Обновлено:

 [
    {
        "firstName": "Rack",
        "lastName": "Jackon",
        "gender": "man",
        "age": 24,
        "address": {
            "streetAddress": "126",
            "city": "San Jone",
            "state": "CA",
            "postalCode": "394221"
        }
    },
   


{
    "firstName": "Apache",
    "lastName": "Spark",
    "gender": "Woman",
    "age": 24,
    "address": {
        "streetAddress": "5543",
        "city": "Queens",
        "state": "NY",
        "postalCode": "11372"
    }
}

]

Это файл .json, который у меня есть. После создания кадра данных мне нужно разделить адрес на 4 столбца.

я использую блоки данных, я думаю, что это искра 3.0

Learner 10.12.2020 01:34

вы упомянули, что адрес представляет собой массив, но выглядит как тип структуры. вы можете использовать address.*, он создаст новые столбцы в соответствии с вашими требованиями.

Srinivas 10.12.2020 02:26
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
2
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте код ниже.

scala> df.show(false)
+--------------------------+
|address                   |
+--------------------------+
|[San Jone, 19422, CA, 126]|
|[Queens, 11372, NY, 5543] |
+--------------------------+
scala> val columns = Seq("city","zip","state","street").zipWithIndex
scala> df.select(columns.map(c => col(s"address")(c._2).as(c._1)):_*).show(false)
+--------+-----+-----+------+
|city    |zip  |state|street|
+--------+-----+-----+------+
|San Jone|19422|CA   |126   |
|Queens  |11372|NY   |5543  |
+--------+-----+-----+------+

Это дало эту ошибку: AnalysisException: имя поля должно быть строковым литералом, но оно равно 0;

Learner 10.12.2020 01:57

val columns = Seq("город","zip","штат","улица").zipWithIndex test.select(columns.map(c => col(s"address")(c._2).as(c ._1)):_*).показать

Learner 10.12.2020 02:07

Я отредактировал вопрос, если он делает его более понятным. Пожалуйста, ответьте, если можете. Спасибо.

Learner 10.12.2020 02:18

Другие вопросы по теме