Попытка удалить вложенный столбец из фрейма данных в pyspark не работает.
Это синпет из моего кода:
`из pyspark. sql импорт функций как F из pyspark. sql .types import IntegerType, BooleanType из pyspark. sql .функции import udf
#simple filter function
@F.udf(returnType=BooleanType())
def my_filter(x):
if (x != df_new.a.b) :
return True
else :
return False
#df.filter(my_filter('id', 'category')).show()
def drop_col(df, struct_nm, delete_struct_child_col_nm):
#fields_to_keep = filter(lambda x: x != delete_struct_child_col_nm, df.select("{}.*".format(struct_nm)).columns)
fields_to_keep = filter(lambda x: my_filter(x) , df.select("{}.*".format(struct_nm)).columns)
fields_to_keep = list(map(lambda x: "{}.{}".format(struct_nm, x), fields_to_keep))
return df.withColumn(struct_nm, struct(fields_to_keep))
drop_col (df_new, "a", df_new.ab) `
Я использовал UDF, потому что попытка следующей строки не сработала. Поскольку это не так! = Символ не работает и не использует тильду
#fields_to_keep = filter(lambda x: x != delete_struct_child_col_nm, df.select("{}.*".format
РЕДАКТИРОВАТЬ: Кто-то попросил схему в комментарии, поэтому я предоставляю ее
root
|-- a: struct (nullable = false)
| |-- rawEntity: string (nullable = true)
| |-- entityType: string (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- StoreId: string (nullable = true)
| | | |-- AppId: string (nullable = true)
| |-- Timestamps: array (nullable = true)
| | |-- element: long (containsNull = true)
| |-- User: string (nullable = true)
| |-- b: array (nullable = true) //trying to drop this
| | |-- element: string (containsNull = true)
| |-- KeywordsFull: array (nullable = true)
| | |-- element: struct (containsNull = true)
| | | |-- Keywords: string (nullable = true)
| | |-- element: string (containsNull = true)