Spark scala:将csv文件上传到azure blob时,FIle已经存在异常

时间:2017-03-30 15:50:24

标签: scala azure apache-spark azure-storage-blobs

我正在从azure blob读取sas文件。将其转换为csv并尝试将csv上传到azure blob。但是对于MB中的小文件,我可以使用以下spark scala代码成功完成相同的操作。

    import org.apache.spark.SparkContext 
    import org.apache.spark.SparkConf
    import org.apache.spark.sql.SQLContext 
    import com.github.saurfang.sas.spark._

     val sqlContext = new SQLContext(sc) 
   val df=sqlContext.sasFile("wasbs://container@storageaccount/input.sas7bdat")
     df.write.format("csv").save("wasbs://container@storageaccount/output.csv");

但是对于GB中的大文件,它给我分析异常wasbs://container@storageaccount/output.csv文件已经存在异常。我也尝试过覆盖。但没有运气。任何帮助都是适当的

1 个答案:

答案 0 :(得分:0)

实际上,您无法正常覆盖HDFS上的现有文件,即使对于MB中的小文件也是如此。

请尝试使用下面的代码覆盖,请检查您的火花版本,因为使用不同火花版本的mehed会有一些差异。

df.write.format("csv").mode("overwrite").save("wasbs://container@storageaccount/output.csv");

我是否使用覆盖模式了解上述代码,无论您是否按照自己的说法进行了尝试。

因此,还有另一种方法可以首先删除现有文件,然后执行覆盖操作。

val hadoopConf = new org.apache.hadoop.conf.Configuration()
val hdfs = org.apache.hadoop.fs.FileSystem.get(new java.net.URI("<hdfs://<namenodehost>/ or wasb[s]://<containername>@<accountname>.blob.core.windows.net/<path> >"), hadoopConf)
try { hdfs.delete(new org.apache.hadoop.fs.Path(filepath), true) } catch { case _ : Throwable => { } }

有一个引发类似问题的火花主题,请参阅http://apache-spark-user-list.1001560.n3.nabble.com/How-can-I-make-Spark-1-0-saveAsTextFile-to-overwrite-existing-file-td6696.html