Сгруппированные данные в фрейме со стрелкой 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 который не поддерживается:

https://github.com/apache/spark/blob/4a4e7aeca79738d5788628d67d97d704f067e8d7/python/pyspark/sql/types.py

Если вы хотите подтвердить, попробуйте позвонить pyspark.sql.types.to_arrow_schema(schema) и посмотрим, что получится.

Поскольку StructType не поддерживается, одним из способов обхода проблемы является использование json.dumps(data) для сброса данных перед их возвратом. В схеме для этого будет поле StringType().

Позже вы можете использовать json.loads() для преобразования в массив / список

Другие вопросы по тегам