【问题标题】:How to read the data of the last 3 days from a folder with parquet files?如何从包含镶木地板文件的文件夹中读取过去 3 天的数据?
【发布时间】:2018-05-15 12:14:21
【问题描述】:

我有一个包含许多拼花文件的文件夹,其名称如下:

user_2018-03-15_checked_products.parquet
user_2018-03-15_unchecked_products.parquet
user_2018-03-14_checked_products.parquet
user_2018-03-14_unchecked_products.parquet
user_2018-03-13_checked_products.parquet
user_2018-03-13_unchecked_products.parquet
user_2018-03-12_checked_products.parquet
user_2018-03-12_unchecked_products.parquet

我阅读所有文件如下:

val df = spark.read.parquet("path/to/folder")

该文件夹包含 100 Gb 的数据,并且其大小正在逐渐增加。但我只需要读取过去 3 天的数据。目前,我阅读了整个文件夹,然后申请 filter?是否可以使用某种掩码来仅选择属于过去 3 天的那些文件名而不是读取整个文件夹?

【问题讨论】:

    标签: scala apache-spark apache-spark-sql parquet


    【解决方案1】:

    您可以读取所有文件名和filter 3 天内的文件。

    val listOfFiles = ??? // read all the files names 
    
    val filteredFile = listOfFiles.filter( file => {
      val dateFormat = new SimpleDateFormat("yyyy-MM-dd")
      val fileDate =  dateFormat.parse(file.split("_")(1))  //get date from file name 
      val currentDate = dateFormat.parse(dateFormat.format(new Date())) // current date
      val days = Days.daysBetween(new LocalDateTime(fileDate), new LocalDateTime(currentDate)).getDays
      //difference in days
    
      if (days <= 3 && days >= 0) true else false
    })
    

    现在将过滤文件列表读取为

    spark.read.parquet(filteredFile: _*)
    

    如果需要附加路径。

    希望这会有所帮助!

    【讨论】:

    • 如何读取所有文件名? val listOfFiles = ??? // read all the files names
    • 是本地还是HDFS?
    • 它在 S3(亚马逊)中。目前我还没有完全理解你的回答。
    • 应该有一个Java SDK或API来从s3目录获取所有文件名。获取所有文件名的列表并使用上述过滤器。并阅读文件列表。
    • If require append the paths. 是什么意思?你的意思是我应该追加.parquet
    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2023-04-01
    • 2020-01-28
    • 2019-08-04
    • 2022-06-16
    • 2019-09-23
    相关资源
    最近更新 更多