Свести схему Dataframe с типом Structtype и Array - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть схема ниже Я пытаюсь сгладить

root

 |-- PORTION: struct (nullable = true)
 |    |-- DATA: struct (nullable = true)
 |    |    |-- ADDR_DATA: array (nullable = true)
 |    |    |    |-- element: struct (containsNull = true)
 |    |    |    |    |-- NAME: struct (nullable = true)
 |    |    |    |    |    |-- ALT_NAME: string (nullable = true)
 |    |    |    |    |    |-- TITLE: string (nullable = true)

Я использую функцию ниже, чтобы сгладить схему. Я выбрал его из Автоматически и элегантно сгладить DataFrame в Spark SQL и изменил для обработки типа массива, как показано ниже:

def flattenSchema(schema: StructType, prefix: String = null) : Array[Column] = 
        schema.fields.flatMap(f => {
        val colName = if (prefix == null) f.name  else prefix + "." + f.name
        f.dataType match {
            case st: StructType => flattenSchema(st, colName)
            case arrayType: ArrayType => arrayType.elementType
                 match {
                        case st: StructType => flattenSchema(st, colName)
                        case _ => Array(col(colName))
            }
            case _ => Array(col(colName))
        }
    })

код работает, но возвращаемые данные имеют тип массива, подобный ниже вместо просто строкового или целочисленного типа.

 root
 |-- ALT_NAME: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- TITLE: array (nullable = true)
 |    |-- element: string (containsNull = true)

данные выглядят как показано ниже

[John Doe] | [John temp]

Мой вопрос, есть ли Таким образом, я могу сгладить схему до строковых или целочисленных типов вместо массива строк, как показано на рисунке. Если нет, то как можно преобразовать массив в строку динамически. Мне нравится, есть решение для любой схемы. спасибо за помощь

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