【问题标题】:Load folder name as column in delta table加载文件夹名称作为增量表中的列
【发布时间】:2021-05-15 08:18:55
【问题描述】:
/SRC1/trialbucket=1/1.parquet
/SRC1/trialbucket=2/2.parquet
/SRC2/trialbucket=1/3.parquet
/SRC2/trialbucket=2/4.parquet

文件夹中所有上述 parquet 文件具有相同的架构。

例如。 Col1,Col2,Col3

我必须将所有文件加载到具有以下架构的增量表中

Col1,Col2,Col3,Source

data1,data2,data3,SRC1

data11,data22,data33,SRC1
data1111,data222,data333,SRC1
data5,data6,data7,SRC2
data55,data66,data77,SRC2
data555,data666,data777,SRC2

我可以对每一个都执行此操作,并将文件夹名称添加为最后一列 (.withColumn),但我必须通过 10000 个此类文件夹来读取所有拼花文件并将它们加载到需要大量时间的表中!

有没有其他方法不用for循环来获取文件夹名称并将其添加到列中?

【问题讨论】:

  • input_file_name 可能会有帮助
  • 输入文件名可以是任何东西。该列将是文件夹名称(SRC1 或 SRC2)

标签: python scala apache-spark apache-spark-sql databricks


【解决方案1】:

您可以使用regexp_extractinput_file_name 中获取foot 文件夹名称:

val df1 = df.withColumn("Source", regexp_extract(input_file_name(), "/(.*)/.*", 1))

【讨论】:

  • 这适用于少量文件夹。但读取 10000 个文件夹并将所有 parquet 数据加载到增量表中效率不高!
  • @justanothertekguy 也许您可以按批次加载文件夹并在每次迭代时插入同一个增量表。
  • 如何批量加载?
  • @justanothertekguy 通过迭代文件夹列表或可用于构造文件夹路径的某种模式,然后在每次迭代中加载一小组文件夹并插入表中..这可能不过是一个新问题。
猜你喜欢
  • 2016-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2018-01-29
相关资源
最近更新 更多