Сгруппированные данные в фрейме со стрелкой apache
schema = StructType([
StructField("title", StringType(), False),
StructField("stringdataA", StringType(), False),
# StructField("list", ArrayType( StructType([
# StructField("A", IntegerType() , False),
# StructField("B", StringType() , False),
# StructField("C", TimestampType(), False)
# ]))),
StructField("stringdataB", StringType(), False)])
@pandas_udf(schema, PandasUDFType.GROUPED_MAP)
def make_data(x):
~~ make data fitted in shcema
groupedList = df.groupby("groupkey").apply(make_data)
Функция 'make_data' создаст данные, которые вписываются в схему, которую я определил, но когда я добавил поле со структурой list (map ()) в схему. Это дало мне ошибку, как показано ниже. Это действительно не поддерживается структура схемы?
Есть ли способ получить данные структуры списка (map ()), которые я могу обработать?
NotImplementedError: Недопустимый returnType с сгруппированной картой. Пользовательские функции Pandas: StructType(List(StructField(title,StringType,false),StructField(stringdataA,StringType,false),StructField(список,ArrayType(StructType(List, StructField) (список (A),StructField(B,StringType,false),StructField(C,TimestampType,false))),true),true),StructField(stringdataB,StringType,false))) не поддерживается
1 ответ
Я думаю, что ваши элементы списка StructType
который не поддерживается:
Если вы хотите подтвердить, попробуйте позвонить pyspark.sql.types.to_arrow_schema(schema)
и посмотрим, что получится.
Поскольку StructType не поддерживается, одним из способов обхода проблемы является использование json.dumps(data) для сброса данных перед их возвратом. В схеме для этого будет поле StringType().
Позже вы можете использовать json.loads() для преобразования в массив / список