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

Spark Connect使用UDF执行失败,提示Permission denied错误

问题解决:Spark Connect调用UDF时Permission Denied错误

核心原因

Spark Executor进程的运行用户(通常是spark用户)没有权限访问/root/miniconda3/bin/python路径——/root目录默认权限为700,仅root用户可访问,其他用户无法进入该目录及子路径。

解决方案

方案1:配置Spark使用非root路径的Python

将Spark的Python环境指定到所有Executor都能访问的非root目录:

  1. 在Spark Connect Server的配置文件(如spark-defaults.conf)中添加:
spark.pyspark.python /path/to/public/python
spark.pyspark.driver.python /path/to/public/python

替换/path/to/public/python为一个所有Executor用户都有执行权限的Python路径,比如/opt/miniconda/bin/python(需提前在所有节点安装并设置好权限)。

  1. 重启Spark Connect Server服务。

方案2:修改root目录及Python路径的权限(不推荐,存在安全风险)

如果必须使用root路径下的Python,临时放宽权限:

# 允许其他用户进入root目录
chmod o+x /root
# 允许其他用户执行Python二进制文件
chmod o+x /root/miniconda3/bin/python
# 确保父目录权限可遍历
chmod o+x /root/miniconda3
chmod o+x /root/miniconda3/bin

⚠️ 此操作会降低系统安全性,仅用于测试环境。

方案3:使用全局可访问的conda环境

创建一个所有用户都能访问的conda环境:

# 以root用户创建全局环境
conda create -p /opt/conda/envs/pyspark_env python=3.8
# 设置权限让所有用户可访问
chmod -R 755 /opt/conda/envs/pyspark_env

然后在Spark配置中指定该环境的Python路径:

spark.pyspark.python /opt/conda/envs/pyspark_env/bin/python

验证方法

修改配置后,重新运行测试代码:

import pyspark
from pyspark.sql import SparkSession
from pyspark.sql.functions import udf

spark = SparkSession.builder.remote("sc://spark-connect-server:15002").getOrCreate()
spark.range(2).withColumn('plus_one', udf(lambda x: x + 1)('id')).show()

如果输出正常的DataFrame结果,说明问题解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:54:55