【问题标题】:Priority error when pyspark save mode 'overwrite' in docker containerdocker容器中pyspark保存模式“覆盖”时的优先级错误
【发布时间】:2021-10-01 13:55:58
【问题描述】:

我正在使用 pyspark 将 csv 文件保存为流。当我保存文件时,我使用的输出模式是“覆盖”,没有任何问题。但是当我想将我的 spark 应用程序容器化时出现错误。我在下面添加代码和错误:

df.write.format("csv").mode("overwrite").save("/app/files")

java.io.IOException: 无法清除输出目录 file:/app/files 在写信之前

我认为错误是由于权限引起的。所以我在 dockerfile 中尝试了 USER root 但错误没有修复。

【问题讨论】:

    标签: python docker apache-spark pyspark dockerfile


    【解决方案1】:

    怎么样

    df.write.format("csv").mode("overwrite").save("file:///app/files")
    

    【讨论】:

    • 抱歉,我忘记在问题中添加文件路径。我编辑了这个问题。实际上保存模式已经存在我的代码。
    【解决方案2】:

    spark程序的运行模式是什么,Local or Standalone or YARN or... 检查docker中的spark程序是否以root用户运行,例如:

    ps -ef | grep spark_app_name
    

    【讨论】:

    • 我检查了 root 用户是否在 docker 中运行并且我的容器的运行模式是本地的。我的操作系统是windows。问题是从这里来的吗?
    • 你的意思是在docker容器中运行windows操作系统吗?
    • 不,alpine 在 docker conaitner 中运行。我的主机是windows
    【解决方案3】:

    我解决了这个问题。输出模式引起的问题。 Spark 输出模式覆盖是删除文件夹并在文件夹内重新创建它。当我将此文件夹分配为卷时,应用程序尝试删除 docker 卷,但它没有这样做。所以我分配给父文件夹作为卷和应用程序可以删除卷下的文件夹。这是 pyspark 代码:

    df.write.format("csv").mode("overwrite").save("/app/files") 
    

    还有 docker 撰写文件:

    version: '3'
        services:
          convert-pivot:
            image: convert-pivot
            restart: always
            container_name: convert-pivot
            volumes:
              - ./files:/app/
    

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2012-03-14
      • 2018-11-10
      相关资源
      最近更新 更多