首页 > 解决方案 > Spark avro 谓词下推

问题描述

我们使用的是 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 是否添加了这些字段?想清楚地了解如何过滤文件以及如何创建分区。

标签: scalaapache-sparkapache-spark-sqlpredicatespark-avro

解决方案


推荐阅读