Azure Databricks使用PySpark ML遇Py4J安全错误求解决
解决Azure Databricks中PySpark ML Feature类构造函数白名单错误的方法
问题重现
运行以下PySpark代码时触发Py4J安全异常:
import pyspark.ml.feature from pyspark.ml.feature import Tokenizer,StopWordsRemover tokenizer = Tokenizer()
错误信息:
Py4JError: An error occurred while calling None.org.apache.spark.ml.feature.Tokenizer. Trace: py4j.security.Py4JSecurityException: Constructor public org.apache.spark.ml.feature.Tokenizer(java.lang.String) is not whitelisted.
解决方案
- 显式指定构造函数参数:Spark ML的特征类设计上推荐明确传入输入输出列参数,同时能绕过白名单限制,直接初始化组件:
from pyspark.ml.feature import Tokenizer, StopWordsRemover # 初始化Tokenizer时指定输入输出列 tokenizer = Tokenizer(inputCol="raw_text", outputCol="tokens") # 初始化StopWordsRemover同理 remover = StopWordsRemover(inputCol="tokens", outputCol="filtered_tokens") - 调整集群安全白名单配置:若上述方法无效,联系Databricks集群管理员修改
spark.py4j.whitelist配置,将需要使用的Spark ML构造函数加入白名单,示例规则:org.apache.spark.ml.feature.Tokenizer org.apache.spark.ml.feature.StopWordsRemover - 使用Pipeline API封装组件:将特征处理步骤封装进Pipeline,通过统一的组件声明方式规避构造函数调用的白名单问题:
from pyspark.ml import Pipeline tokenizer = Tokenizer(inputCol="raw_text", outputCol="tokens") remover = StopWordsRemover(inputCol="tokens", outputCol="filtered_tokens") pipeline = Pipeline(stages=[tokenizer, remover])
内容的提问来源于stack exchange,提问作者Ipsheet Agarwal
相关产品推荐
相关产品推荐

