我们使用的是 Avro 数据格式,数据按年、月、日、小时、分钟进行分区
我看到存储在 HDFS 中的数据为
/data/year=2018/month=01/day=01/hour=01/min=00/events.avro
我们使用加载数据
val schema = new Schema.Parser().parse(this.getClass.getResourceAsStream("/schema.txt"))
val df = spark.read.format("com.databricks.spark.avro").option("avroSchema",schema.toString).load("/data")
然后使用谓词下推过滤数据 -
var x = isInRange(startDate, endDate)($"year", $"month", $"day", $"hour", $"min")
df = tableDf.filter(x)
有人可以解释幕后发生的事情吗?我想具体了解输入文件的过滤何时发生以及在哪里发生?有趣的是,当我打印模式时,会自动添加字段年、月、日和小时,即实际数据不包含这些列。Avro 是否添加了这些字段?想清楚地了解如何过滤文件以及如何创建分区。