Получение ошибки при вызове кода ниже. Это взрыв массива в кадре данных без потери нулевых значений, но при вызове столбцов я получаю сообщение об ошибке
Объект не имеет атрибута _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'