【问题标题】:Read files from multiple folders from ADLS gen2 storage via databricks and create single target file通过数据块从 ADLS gen2 存储中的多个文件夹读取文件并创建单个目标文件
【发布时间】:2021-11-03 19:34:21
【问题描述】:

我正在使用 databricks 服务进行分析。我已经与 ADLS gen2 存储建立了连接并创建了一个挂载点,现在该容器包含多个文件夹多年和几个月,并且每个月在月份文件夹中都有镶木地板文件。我必须阅读所有这些文件并创建一个包含完整月份数据的目标文件。任何人都可以建议我如何实现它?

【问题讨论】:

  • 数据是否已分区 - 您的目录的名称类似于 col=value,还是只是目录?
  • 只是目录
  • 您能否分享文件类型、文件架构以及最终输出的架构是什么?

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


【解决方案1】:

假设您的 parquet 文件遵循特定的目录模式,您可以use wildcards

如果您的文件以/mnt/point/folder/YYYY/MM/foo.parquet 之类的模式编写,您可以使用/mnt/point/folder/*/* 遍历所有YYYY 和MM 文件夹和文件

这是一个可重现的 pyspark 示例,假设您有一个名为“data”的挂载点。

df_A = spark.createDataFrame([
    ['a',1],
    ['a',2],
    ['a',3]
], ["Letter", "Number"])
df_B = spark.createDataFrame([
    ['b',1],
    ['b',2],
    ['b',3]
], ["Letter", "Number"])

df_A.write.parquet('/mnt/data/mydata/1999/01')
df_B.write.parquet('/mnt/data/mydata/2001/09')

new_df = spark.read.parquet('/mnt/data/mydata/*/*')

根据@Alex Ott 的评论,如果您的数据已分区(例如,有一个名为 year=1999 的文件夹和名为 month=01、month=02 等的子文件夹),您可以利用 partition discovery 并且 spark 会更智能意识到它应该遍历所有子文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 2019-11-18
    • 2020-04-26
    • 1970-01-01
    • 2020-12-21
    • 2022-08-11
    • 2021-06-26
    • 2019-09-01
    相关资源
    最近更新 更多