Добавление элемента в существующую структуру в искровом фрейме данных

У меня есть кадр данных pyspark, и схема выглядит так.

root
|-- useragent: string (nullable = true)
|-- properties: struct (nullable = true)
|    |-- browser: string (nullable = true)
|    |-- device: string (nullable = true)

Я использую udf + withColumn для извлечения дополнительной информации из пользовательского агента. Но я могу хранить любое дополнительное свойство, которое я создаю, только в новом столбце. Есть ли способ добавить его в саму структуру?

Я изменил схему, но она не передает все данные, которые мне нужны, из других свойств, которые уже существуют.

df = df.schema['properties'].dataType.add(StructField('type', StringType()))

Имеет ли смысл преобразовать это в RDD?


person datacurious    schedule 18.03.2017    source источник


Ответы (1)


Вы не получите никаких данных, используя этот фрагмент кода, так как вы не выбираете никаких данных. То, что вы делаете в этой операции, — это не что иное, как доступ к свойству Schema, его изменение каким-то образом и назначение его переменной df (это не модифицированный кадр данных, который вы ожидаете), а просто объект StructType (Кажется, есть некоторый синтаксис там ошибка, проверьте)

Что вам нужно сделать, так это изменить фрейм данных с помощью select и подходящих функций преобразования. Вы можете рассмотреть возможность создания нового столбца типа StructField с необходимой структурой и добавить его как новый столбец с помощью функции withColumn.

person Rags    schedule 22.03.2017