NotImplementedError:具有分组映射 Pandas UDF 的无效 returnType

Posted

技术标签:

【中文标题】NotImplementedError:具有分组映射 Pandas UDF 的无效 returnType【英文标题】:NotImplementedError: Invalid returnType with grouped map Pandas UDFs 【发布时间】:2020-05-11 17:21:59 【问题描述】:

我的 Pandas UDF 的 output_schema 包含以下字段:

Out[183]: [StructField(id,StringType,true),
 StructField(2018-01-01,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-02,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-03,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-04,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-05,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-06,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-07,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 StructField(2018-01-08,StructType(List(StructField(real,FloatType,true),StructField(imag,FloatType,true))),true),
 ...

并且是类型: Out[185]: pyspark.sql.types.StructType

我要输出的是带有id 的列,而其余列是包含两个浮点数的元组。我用于定义模式的代码如下,基本上为不是id 的每一列定义了StructType() 元组。

fields = []
for f in json.loads(skeleton_schema.json())["fields"]:
  if f["name"] != "id":
    fields.append(StructField(f["name"], StructType([ 
          StructField(FloatType(), True),
          StructField(FloatType(), True)
        ]), True))
  else:
      fields.append(StructField.fromJson(f))
output_schema = StructType(fields)

但是,在运行我的 UDF 时,我收到 NotImplementedError 并且输出打印了我的整个架构并说它不受支持。究竟什么不支持,我做错了什么?

【问题讨论】:

【参考方案1】:

经过更多调试,我发现不支持嵌套结构类型。支持的类型见here。

【讨论】:

您也可以查看here 以查看尚不支持的类型。

以上是关于NotImplementedError:具有分组映射 Pandas UDF 的无效 returnType的主要内容,如果未能解决你的问题,请参考以下文章

具有单个映射器和两个不同减速器的 hadoop 作业

具有多种键类型的 Hadoop MapReduce 映射器和化简器

具有多个后端/DI 时的 ORM 和 POCO - 架构?自动映射器?

当我的类中有属性具有默认构造函数来提供值自动映射器时,如何映射?

使用 Ramda 以声明性方式编写具有优先级的 Boolean -> 字符串映射器

NotImplementedError:无法转换符号张量