scala - 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 是否添加了这些字段?想清楚地了解如何过滤文件以及如何创建分区。
解决方案
推荐阅读
- django - 邮递员 POST 请求在 Django 中返回 None
- c++ - 使用 LuaBridge 从 LuaRef 读取参数列表
- excel - 尽管 Application.screenupdating = false 按钮闪烁
- c++ - 新的控制按钮没有正确的 Windows ID
- python - 关于列表理解的多个条件语句
- python - 从 xlsx 导入持续时间/将对象转换为持续时间
- server - 如何将本地端口绑定到 HTTPS?
- oracle - ORACLE MD5 函数的不同输出与相同输入
- python - 使用 Python 从 PDF 文件中提取标题、副标题和段落
- php - 有没有更短的方法来防止通过未设置的数组“循环”?