Pyspark - цикл через structType и ArrayType для выполнения типизации в structfield - PullRequest
1 голос
/ 04 ноября 2019

Я совершенно новичок в pyspark, и эта проблема ошеломляет меня. В основном я ищу масштабируемый способ циклического ввода типов через structType или ArrayType.

Пример моей схемы данных:

root
 |-- _id: string (nullable = true)
 |-- created: timestamp (nullable = true)
 |-- card_rates: struct (nullable = true)
 |    |-- rate_1: integer (nullable = true)
 |    |-- rate_2: integer (nullable = true)
 |    |-- rate_3: integer (nullable = true)
 |    |-- card_fee: integer (nullable = true)
 |    |-- payment_method: string (nullable = true)
 |-- online_rates: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- rate_1: integer (nullable = true)
 |    |    |-- rate_2: integer (nullable = true)
 |    |    |-- online_fee: double (nullable = true)
 |-- updated: timestamp (nullable = true)

Как вы можете видеть здесь,card_rates является структурой, а online_rates является массивом структуры. Я ищу способы перебрать все поля выше и условно типизировать их. В идеале, если он должен быть числовым, он должен быть преобразован в двойной, если он должен быть строкой, он должен быть преобразован в строку. Мне нужно зацикливаться, потому что эти rate_* поля могут расти со временем.

Но сейчас я доволен возможностью их зациклить и привести все их к строковым типам, так как я очень новичок в pyspark и до сих порпытаюсь почувствовать это.

Моя желаемая схема вывода:

root
 |-- _id: string (nullable = true)
 |-- created: timestamp (nullable = true)
 |-- card_rates: struct (nullable = true)
 |    |-- rate_1: double (nullable = true)
 |    |-- rate_2: double (nullable = true)
 |    |-- rate_3: double (nullable = true)
 |    |-- card_fee: double (nullable = true)
 |    |-- payment_method: string (nullable = true)
 |-- online_rates: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- rate_1: double (nullable = true)
 |    |    |-- rate_2: double (nullable = true)
 |    |    |-- online_fee: double (nullable = true)
 |-- updated: timestamp (nullable = true)

У меня заканчиваются идеи, как это сделать.

Я получил отсюда ссылку: PySpark преобразовывает поле структуры внутри массива в строку

, но это решение жестко кодирует поле и на самом деле не зацикливает поля.

Пожалуйста, помогите.

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