You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Databricks中使用PyDeequ ColumnProfilerRunner报错KeyError: 'StringColumnProfile'

解决Databricks中pydeequ ColumnProfilerRunner的KeyError: 'StringColumnProfile'问题

问题描述

在Databricks中使用pydeequ,已通过Maven安装com.amazon.deequ:deequ:2.0.4-spark-3.3,Analyzers功能正常,但运行官方示例的ColumnProfilerRunner代码时触发KeyError: 'StringColumnProfile'。

问题原因

pydeequ的Python端代码与Java端deequ 2.x版本的类名不兼容:deequ 2.x将字符串类型的列分析类重命名为StringColumnProfile,但旧版本的pydeequ中ColumnProfilesBuilder的columnProfileClasses字典未添加该类名的映射,导致无法识别Java端返回的类实例。

解决方案

方案1:升级pydeequ到兼容版本

安装与deequ 2.0.4-spark-3.3匹配的pydeequ版本,确保Python端代码适配Java端的类名变化:

pip install pydeequ==0.1.10 --upgrade

(注:0.1.10及以上版本已适配deequ 2.x的类名变更)

方案2:动态添加类名映射(无需升级)

如果无法升级pydeequ,可在代码中手动给ColumnProfilesBuilder添加StringColumnProfile的映射:

from pydeequ.profiles import *

# 手动添加类名映射
ColumnProfilesBuilder.columnProfileClasses['StringColumnProfile'] = StringProfile

# 正常运行ColumnProfilerRunner代码
result = ColumnProfilerRunner(spark) \
    .onData(df) \
    .run()

方案3:修改pydeequ源码(临时应急)

找到pydeequ安装目录下的profiles.py文件(示例路径:/local_disk0/.ephemeral_nfs/envs/pythonEnv-f96b57df-8a1b-408f-821a-896e4943bb1a/lib/python3.9/site-packages/pydeequ/profiles.py),修改ColumnProfilesBuilder类的__init__方法,在columnProfileClasses字典中添加映射:

class ColumnProfilesBuilder:
    def __init__(self, spark_session):
        self._spark_session = spark_session
        self._jvm = spark_session._jvm
        self.columnProfileClasses = {
            "NumericColumnProfile": NumericProfile,
            "StringColumnProfile": StringProfile,  # 添加这一行
            "BooleanColumnProfile": BooleanProfile,
            "DateTimeColumnProfile": DateTimeProfile,
            "UnknownColumnProfile": UnknownProfile
        }
        # 其余代码保持不变

内容的提问来源于stack exchange,提问作者Azul Selser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 06:16:35