在 Azure Blob 存储中覆盖后如何命名 csv 文件

Posted

技术标签:

【中文标题】在 Azure Blob 存储中覆盖后如何命名 csv 文件【英文标题】:How to name a csv file after overwriting in Azure Blob Storage 【发布时间】:2021-09-30 13:05:38 【问题描述】:

我正在使用 Databricks 笔记本读取文件并将其写入同一位置。但是当我写入文件时,我会得到很多不同名称的文件。 像这样:

我不确定为什么在我指定的位置创建这些文件。 另外,在我执行写操作后,创建了另一个名为“new_location”的文件

我想要的是,在从 Azure Blob 存储读取文件后,我应该将文件写入与原始文件同名的相同位置。但我无法这样做。请帮帮我,因为我是 Pyspark 的新手 我已经安装了,现在我正在读取 CSV 文件存储在一个 azure blob 存储容器中。 覆盖的文件创建为名称“part-00000-tid-84371752119947096-333f1e37-6fdc-40d0-97f5-78cee0b108cf-31-1-c000.csv”

代码:

df = spark.read.csv("/mnt/ndemo/nsalman/addresses.csv", inferSchema = True)
df = df.toDF("firstName","lastName","street","town","city","code")
df.show()
file_location_new = "/mnt/ndemo/nsalman/new_location"
# write the dataframe as a single file to blob storage
df.write.format('com.databricks.spark.csv') \
  .mode('overwrite').option("header", "true").save(file_location_new)

【问题讨论】:

【参考方案1】:

Spark 将为数据集的每个分区保存部分 csv 文件。要生成单个 csv 文件,您可以将其转换为 pandas 数据帧,然后将其写出来。

尝试更改这些行:

df.write.format('com.databricks.spark.csv') \
  .mode('overwrite').option("header", "true").save(file_location_new)

到这一行

df.toPandas().to_csv(file_location_new, header=True)

您可能需要在 "/dbfs/" 前面加上 file_location_new 才能使其正常工作。

这是一个最小的独立示例,演示如何使用 pandas 编写 csv 文件:

df = spark.createDataFrame([(1,3),(2,2),(3,1)], ["Testing", "123"])
df.show()
df.toPandas().to_csv("/dbfs/" + "/mnt/ndemo/nsalman/" + "testfile.csv", header=True)

【讨论】:

file_location_new = "/mnt/ndemo/nsalman/new_location" # 转换成pandas数据框,然后写出来 df = df.toPandas().to_csv("/dbfs/"+file_location_new , header=True) df.write.format('com.databricks.spark.csv') \ .mode('overwrite').option("header", "true").save(file_location_new) 我这样做了,但是它给了我错误:AttributeError:'NoneType'对象没有属性'toPandas' 你确定 df 是 spark 数据框吗?我已经更新了我的答案,以便更准确地了解要更改的内容。

以上是关于在 Azure Blob 存储中覆盖后如何命名 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

重命名 Azure Blob 存储中的 csv 文件

下载后如何从 azure blob 存储中删除文件

如何在 Azure 存储位置创建子容器

使用 AspNet 从 Azure Blob 存储下载和重命名文件

如何在 Azure 中的密钥轮换后为存储 Blob 的客户端请求提供服务

我们如何使用代理和 NodeJS 从 azure 存储下载 blob?