Azure Databricks共享计算下OneHotEncoder构造器未白名单问题求助
问题根源
Shared Compute模式下,Databricks的安全策略仅允许调用Spark ML组件的白名单构造函数,直接传入字符串名称的OneHotEncoder(String)构造函数不在白名单范围内,而Personal Compute模式无此安全限制,因此代码在两种环境下表现不一致。
修复步骤
改用无参构造函数创建
OneHotEncoder实例,再通过setter方法配置参数(如输入列、输出列),这是Spark ML官方推荐的标准用法,完全符合Shared Compute的安全策略要求。错误写法(触发报错):
from pyspark.ml.feature import OneHotEncoder # 直接传字符串名称的构造函数被安全策略拦截 encoder = OneHotEncoder("encoder_name") encoder.setInputCol("category_col").setOutputCol("encoded_col")正确写法:
from pyspark.ml.feature import OneHotEncoder # 无参构造后通过链式setter配置参数 encoder = OneHotEncoder() \ .setInputCol("category_col") \ .setOutputCol("encoded_col") \ .setDropLast(True)也可以使用
setParams方法批量设置参数,代码更简洁:encoder = OneHotEncoder().setParams( inputCol="category_col", outputCol="encoded_col", dropLast=True )
验证
修改代码后重新在Shared Compute集群上运行,即可绕过构造函数白名单限制,正常执行OneHot编码逻辑,同时解决Personal Compute模式下的列迭代问题。
内容的提问来源于stack exchange,提问作者Naimesh Vaja
相关产品推荐
相关产品推荐

