我正在从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文件已经存在异常。我也尝试过覆盖。但没有运气。任何帮助都是适当的
答案 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。