如何重命名Azure中保存在数据湖上的文件

时间:2019-01-08 23:20:40

标签: scala azure-data-lake azure-databricks

我尝试使用数据块中的scala在Datalake中合并两个文件,并使用以下代码将其保存回Datalake:

val df =sqlContext.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("adl://xxxxxxxx/Test/CSV") 
df.coalesce(1).write.
              format("com.databricks.spark.csv").
              mode("overwrite").
              option("header", "true").
save("adl://xxxxxxxx/Test/CSV/final_data.csv")

但是,文件final_data.csv保存为目录而不是包含多个文件的文件,而实际的.csv文件保存为'part-00000-tid-dddddddddddd-xxxxxxxxxx.csv'。

如何重命名此文件,以便可以将其移动到另一个目录?

1 个答案:

答案 0 :(得分:0)

知道了。可以使用以下代码将其重命名并放置到另一个目标中。合并的当前文件也将被删除。

val x = "Source"
val y = "Destination"
val df = sqlContext.read.format("csv")
        .option("header", "true").option("inferSchema", "true")
        .load(x+"/")
df.repartition(1).write.
   format("csv").
   mode("overwrite").
   option("header", "true").
   save(y+"/"+"final_data.csv")
dbutils.fs.ls(x).filter(file=>file.name.endsWith("csv")).foreach(f => dbutils.fs.rm(f.path,true))
dbutils.fs.mv(dbutils.fs.ls(y+"/"+"final_data.csv").filter(file=>file.name.startsWith("part-00000"))(0).path,y+"/"+"data.csv")
dbutils.fs.rm(y+"/"+"final_data.csv",true)