Как выполнить общую обработку искры StructType в Scala UDF? - PullRequest
0 голосов
/ 13 июля 2020

У меня есть фрейм данных со следующей схемой

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 конструкциями , поэтому специально ищу способы:

  1. Как преобразовать сложный искровой StructType в Scala тип данных Object-X?
  2. Затем выполните "НЕКОТОРЫЕ" общие операции для Scala Object-X
  3. Как преобразовать обратно Scala Object-X в Spark MapType, который можно добавить как новый столбец в фрейм данных?
...