GCP Serverless PySpark路径含非法字符报错求助(Windows环境)
Windows下gcloud提交Dataproc PySpark批处理反斜杠路径错误的解决办法
问题场景
在Windows本地机器执行gcloud dataproc batches submit pyspark提交简单Python代码时,触发Java路径解析报错:
=========== Cloud Dataproc Agent Error =========== java.lang.IllegalArgumentException: Illegal character in path at index 38: gs://my-bucket/dependencies\\hello.py at java.base/java.net.URI.create(URI.java:883) at com.google.cloud.hadoop.services.agent.job.handler.AbstractJobHandler.registerResourceForDownload(AbstractJobHandler.java:592)
执行命令:
gcloud dataproc batches submit pyspark hello.py --batch=hello-batch-5 --deps-bucket=my-bucket --region=us-central1
测试用Python代码:
if __name__ == '__main__': print("Hello")
问题根源是Windows系统的反斜杠路径分隔符被gcloud带入GCS路径,而Java URI规范不允许反斜杠存在。
解决方法
1. 临时配置gcloud使用Python标准路径处理
在Windows命令行(CMD/PowerShell)中先设置环境变量,再执行命令:
set CLOUDSDK_PYTHON_SITEPACKAGES=1 gcloud dataproc batches submit pyspark hello.py --batch=hello-batch-5 --deps-bucket=my-bucket --region=us-central1
该配置会让gcloud调用Python的路径处理逻辑,自动将反斜杠转换为正斜杠。
2. 手动指定GCS文件路径
先把hello.py手动上传到gs://my-bucket/dependencies/hello.py,再用--files参数指定GCS路径:
gcloud dataproc batches submit pyspark --files gs://my-bucket/dependencies/hello.py --batch=hello-batch-5 --deps-bucket=my-bucket --region=us-central1
3. 使用WSL执行命令
在Windows子系统Linux(WSL)环境中运行原gcloud命令,Linux环境默认使用正斜杠作为路径分隔符,不会触发该问题。
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

