Python Pyspark Conda saveAsTextFile文件已存在

Python Pyspark Conda saveAsTextFile文件已存在,python,apache-spark,pyspark,conda,Python,Apache Spark,Pyspark,Conda,我正在使用定制的conda环境运行spark提交作业。我设法用纱线将conda环境运出,它在运行时没有问题。然而,当我试图保存ASTEXTFILE时,它总是在最后一步失败。在我运行作业之前,我确保路径是空的,但不知何故,它是在我启动作业后创建的,之后那里有一个临时文件夹 这个方法非常简单,script.py本身一点也不复杂,一切都可以通过打印到stdout来工作(读取文件、计数),我可以从执行器日志中读取它,但不能保存stextfile 由于此错误,所有其他执行器都没有启动。我假设驱动程序将创建

我正在使用定制的conda环境运行spark提交作业。我设法用纱线将conda环境运出,它在运行时没有问题。然而,当我试图保存ASTEXTFILE时,它总是在最后一步失败。在我运行作业之前,我确保路径是空的,但不知何故,它是在我启动作业后创建的,之后那里有一个临时文件夹

这个方法非常简单,script.py本身一点也不复杂,一切都可以通过打印到stdout来工作(读取文件、计数),我可以从执行器日志中读取它,但不能保存stextfile

由于此错误,所有其他执行器都没有启动。我假设驱动程序将创建这个文件夹,创建临时/标志文件,指示它正在工作,所有执行者将通过保存临时输出(稍后添加到该文件夹中)进行分治。毕竟,临时标志将被删除,指示作业已完成

我就是这样开始工作的:

PYSPARK_PYTHON=./${CONDAENV}/bin/python3 \
/opt/cloudera/parcels/SPARK2/lib/spark2/bin/spark-submit  \
--master yarn \
--deploy-mode cluster \
--conf spark.yarn.appMasterEnv.SPARK_HOME=/opt/cloudera/parcels/SPARK2/lib/spark2 \
--conf spark.yarn.appMasterEnv.YARN_CONF_DIR=/etc/hadoop/conf \
--num-executors 4 \
--archives py36yarn.zip#PY_ENV \
--executor-memory 4G \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./PY_ENV/py36yarn/bin/python3 \
script.py
这是错误消息:

script.py", line 50, in main
    res.saveAsTextFile(filename_output)
File "/opt/cloudera/parcels/SPARK2/lib/spark2/python/pyspark/rdd.py", line 1552, in saveAsTextFile
    keyed._jrdd.map(self.ctx._jvm.BytesToString()).saveAsTextFile(path)
File "/opt/cloudera/parcels/SPARK2/lib/spark2/python/lib/py4j-0.10.4-src.zip/py4j/java_gateway.py", line 1133, in __call__
File "/opt/cloudera/parcels/SPARK2/lib/spark2/python/lib/py4j-0.10.4-src.zip/py4j/protocol.py", line 319, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o65.saveAsTextFile.
: org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://ddsco-nameservice/user/yolo/arrowcom_result already exists
    at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:131)
   ....
    at py4j.GatewayConnection.run(GatewayConnection.java:214)
    at java.lang.Thread.run(Thread.java:748)
阻止以下操作的文件:

$ hdfs dfs -ls hdfs://ddsco-nameservice/user/yolo/arrowcom_result/
Found 1 items
drwxrwxr-x+  - a59347 users          0 2020-03-19 10:18 hdfs://ddsco-nameservice/user/yolo/arrowcom_result/_temporary

看起来您可能错过了输出路径末尾的“/”

说明:

这是写入文件时的标准行为,两步过程中,所有 中间结果将写入一个目录(默认情况下,在输出路径中创建,带有spark的_临时前缀,然后重命名/移动以匹配输出路径)

如果路径已经存在,spark甚至会在生成可由save.mode('overwrite')处理的临时文件之前引发异常

您可以通过Spark.local.dir属性将每个Spark应用程序的临时文件夹路径更改为其他位置