当前位置: 首页 > 知识库问答 >
问题:

使用spark csv写入spark数据帧失败

尉迟雅昶
2023-03-14

我正在尝试使用pysparkn和spack-csv使用以下代码将火花数据帧写入s3

df1.filter( df1['y'] == 2)\
            .withColumnRenamed("x",'a')\
            .select("a","b","c")\
            .write\
            .format('com.databricks.spark.csv')\
            .options(header="true")\
            .options(codec="org.apache.hadoop.io.compress.BZip2Codec")\
            .save('s3://bucket/abc/output")

但是,我得到的错误是“输出目录已经存在”,我确信输出目录在作业开始之前不存在,我尝试使用不同的输出目录名称运行,但写入仍然失败。

如果我在作业失败后查看s3桶,我发现很少有零件文件是由火花写入的,但当它尝试写入更多时它失败了,脚本在本地运行良好,我在aws集群上使用10个火花执行器。有人知道这段代码有什么问题吗?

共有1个答案

狄飞尘
2023-03-14

尝试使用下面的代码它应该可以解决问题。内部它使用Hadoop api来检查文件的存在。请检查执行器的日志。您可能会发现一些有用的东西。

df1.filter( df1['y'] == 2)\
            .withColumnRenamed("x",'a')
            .select("a","b","c")
            .write
            .mode(Overwrite)
            .format('com.databricks.spark.csv')
            .options(header="true")
            .options(codec="org.apache.hadoop.io.compress.BZip2Codec")
            .save('s3://bucket/abc/output")
 类似资料:
  • null 非常感谢任何指向文档或非常基本的示例的指针。

  • 我正在使用Spark 2.3,我需要将Spark数据帧保存到csv文件中,我正在寻找更好的方法。。查看相关/类似的问题,我发现了这个问题,但我需要一个更具体的: 如果DataFrame太大,如何避免使用Pandas?因为我使用了函数(下面的代码),它产生了: 内存不足错误(无法分配内存)。 使用文件I/O直接写入csv是更好的方法吗?它可以保留分隔符吗? 使用df。聚结(1)。写选项(“标题”、“

  • 我有一个Spark(2.4)数据帧,我想将其编写为管道分隔文件。应该是很简单的 我在中得到一个文件。 到目前为止,一切顺利。但我实际上希望文件名是特定的,例如,tmp/myDF。csv 但是在save中输入这个字符串只会创建一个名为myDF的dir。csv并创建零件*。csv文件。 有没有办法用一个特定的名称来编写数据帧?

  • 我有一个名为df的数据库数据帧。我想将它作为csv文件写入S3存储桶。我有S3存储桶名称和其他凭据。我检查了这里给出的在线留档https://docs.databricks.com/spark/latest/data-sources/aws/amazon-s3.html#mount-aws-s3它说使用以下命令 但我有的是数据帧,而不是文件。怎么才能实现?

  • 我试图做一些非常简单的事情,我有一些非常愚蠢的挣扎。我想这一定与对火花的基本误解有关。我非常感谢任何帮助或解释。 我有一张非常大的桌子(~3 TB,~300毫米行,25k个分区),在s3中保存为拼花地板,我想给一些人一个很小的拼花文件样本。不幸的是,这要花很长时间才能完成,我不明白为什么。我尝试了以下方法: 然后当这不起作用时,我尝试了这个,我认为应该是一样的,但我不确定。(我添加了,以尝试调试。

  • 我正在使用pyspark和spark-cassandra-connector_2.11-2.3.0.jar与cassandra DB。我正在从一个密钥空间读取数据帧并写入另一个不同的密钥空间。这两个密钥空间具有不同的用户名和密码。 我使用以下方法创建了 sparkSession: 我使用此 SparkSession 将数据作为数据帧读取为: 我可以使用上述会话读取数据。spark_session附