У меня есть фрейм данных со следующей схемой
root
|-- name: integer (nullable = true)
|-- address: integer (nullable = true)
|-- cases: array (nullable = true)
| |-- element: struct (containsNull = true)
| | |-- caseOpenTime: integer (nullable = true)
| | |-- caseDescription: string (nullable = true)
| | |-- caseSymptons: map (nullable = true)
| | | |-- key: string
| | | |-- value: struct (valueContainsNull = true)
| | | | |-- duration: integer (nullable = true)
| | | | |-- description: string (nullable = true)
Я хочу написать UDF, который может принимать столбец «случаев» во фрейме данных и создавать из него еще один столбец «производный столбец1».
I хотите написать эту логику деривации c с общей обработкой без использования конструкций SQL, поддерживаемых Spark Dataframe. Таким образом, шаги будут следующими:
val deriveDerivedColumen1_with_MapType = udf(_ => MapType = (casesColumn: ArrayType) => {
val derivedMapSchema = DataTypes.createMapType(StringType, LongType)
1. Convert casesColumn to scala object-X
2. ScalaMap<String, Long> scalaMap = myScalaObjectProcessing(object-X)
3. (return) scalaMap.convertToSparkMapType(schema = derivedMapSchema)
})
Для определенных c вариантов использования могут использоваться конструкции Dataframe SQL. Но я ищу общую обработку, которая не ограничена SQL конструкциями , поэтому специально ищу способы:
- Как преобразовать сложный искровой StructType в Scala тип данных Object-X?
- Затем выполните "НЕКОТОРЫЕ" общие операции для Scala Object-X
- Как преобразовать обратно Scala Object-X в Spark MapType, который можно добавить как новый столбец в фрейм данных?