【问题标题】:How do I rename the file that was saved on a datalake in Azure如何重命名保存在 Azure 数据湖中的文件
【发布时间】:2019-06-03 16:43:16
【问题描述】:

我尝试使用数据块中的 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-dddddddddd-xxxxxxxxxx.csv”。

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

【问题讨论】:

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


    【解决方案1】:

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

    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)
    

    【讨论】:

    • 刚开始使用databricks,您能告诉我(part-00000 文件)的重命名在哪里吗?我能够将文件移动到不同的文件夹,但无法使用 dbutils 重命名它。
    • dbutils.fs.mv 具有重命名文件的效果。尽管它宁愿复制和删除旧文件。据我所知,Databricks 没有真正的重命名功能。
    • "NameError: name 'dbutils' is not defined Traceback (last recent call last): NameError: name 'dbutils' is not defined" 我遇到了上述错误
    猜你喜欢
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多