我已将数据以拼花文件格式保存在仓库中,并且按日期类型列进行了分区。
我尝试使用Scala Spark从当前日期获取最近N天的数据。
保存的文件数据如下,作为仓库路径。
Tespath/filename/dt=2020-02-01
Tespath/filename/dt=2020-02-02
...........
Tespath/filename/dt=2020-02-28
如果我读取所有数据,则是非常大量的数据。
由于使用镶木地板格式正确地对数据集进行了分区,因此您只需要读取目录Testpath/filename
,并让Spark执行分区发现。
它将在您的架构中添加一个dt
列,其路径名称为dt=<value>
。此值可用于过滤您的数据集,Spark将通过分区修剪所有与您不匹配的目录来优化读取dt
列上的谓词。您可以尝试这样的事情:
import spark.implicits._
import org.apache.spark.functions._
val df = spark.read.parquet("Testpath/filename/")
.where($"dt" > date_sub(current_date(), N))
您需要确保spark.sql.parquet.filterPushdown
设置为true(默认设置)