Я совершенно новичок в 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 преобразовывает поле структуры внутри массива в строку
, но это решение жестко кодирует поле и на самом деле не зацикливает поля.
Пожалуйста, помогите.