PYSPARK: - Развертывание массива в кадре данных без потери нулевых значений: объект DataFrame не имеет атрибута _get_object_id - PullRequest
0 голосов
/ 05 июля 2018

Получение ошибки при вызове кода ниже. Это взрыв массива в кадре данных без потери нулевых значений, но при вызове столбцов я получаю сообщение об ошибке Объект не имеет атрибута _get_object_id. Нужна помощь в другом способе вызова столбца, который может работать.

from pyspark.sql import SparkSession
from pyspark.sql import DataFrame
from pyspark.sql import Row
from pyspark.sql.types import ArrayType
from pyspark.sql.functions import *
from functools import reduce

    def explode_outer(df, columns_to_explode):
        array_fields = dict([(field.name, field.dataType)
                             for field in df.schema.fields
                             if type(field.dataType) == ArrayType])

        return reduce(lambda df_with_explode, column:
                      df_with_explode.withColumn(column, explode(
                          when(size(df_with_explode[column]) != 0, df_with_explode[column])
                              .otherwise(array(lit(None).cast(array_fields[column].elementType))))),
                      columns_to_explode, df)

При выполнении:

cols = ['columname']
df_1 = df.select(explode_outer(df,cols))

Ошибка:

AttributeError: 'DataFrame' object has no attribute '_get_object_id'

1 Ответ

0 голосов
/ 09 июля 2018

Это сделано, поскольку есть ошибка ключа при получении столбца из вложенных данных. После обработки этот код работает нормально .... Обновление Вопрос также для правильного использования для других. Спасибо

...