【问题标题】:Pyspark to iterate through year, month and date folders and subfolders to get the latest filePyspark 遍历年、月、日文件夹和子文件夹以获取最新文件
【发布时间】:2021-06-04 11:55:55
【问题描述】:

有人可以帮助使用 pyspark 中的一些代码来遍历文件夹和子文件夹以获取最新文件。

文件夹和子文件夹如下所示。现在我想循环到最新年份文件夹,然后是最新月份文件夹,然后是最新日期文件夹来获取文件。

Raw/2019
Raw/2020/06/21
Raw/2021/03/18/file.csv
Raw/2021/04/13/file.csv
Raw/2021/04/14/file.csv

【问题讨论】:

  • 为什么需要 pyspark?文件是否存储在 hdfs 中?
  • @pythonic833 这是增量数据。数据将每天加载到数据湖存储中。所以我需要从存储中提取最新的文件。然后我将安装这些数据。

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


【解决方案1】:

您不需要 Spark 来执行此操作。由于您使用的是 Azure Databricks,因此您应该改用 Databricks File System API,所以像这样

lst = dbutils.fs.ls("dbfs:/Raw/")
print(sorted(lst, reverse=True)[0])

【讨论】:

    【解决方案2】:

    获取最新目录的最佳方法是提到的文件系统 API pltc

    进一步补充,我有一个小的实用函数,它利用文件系统 API 递归地迭代输入路径并使用 getctime 对它们进行排序 -

    def latest_dir(inp):
      
      def recur_directory(inp,res=[]):
          inp_dir = dbutils.fs.ls(inp)
          for dr in inp_dir:
              if os.path.isdir("/dbfs" + dr.path[5:]):
                  d = recur_directory(dr.path,res)
              else:
                res += [inp]
                break
                  
          return res
      
      dir_lst = [ recur_directory(x.path) for x in dbutils.fs.ls(inp[5:]) ][0]
      
      return sorted(["/dbfs" + x[5:] for x in dir_lst], key=os.path.getctime,reverse=True)
    
    

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多