请帮我写一个最佳的火花查询。我读过predicate pushdown:
在加载后立即执行where或过滤运算符 数据集,Spark SQL将尝试将where / filter谓词向下推送到 数据源使用带有WHERE子句的相应SQL查询(或 无论数据源的适当语言是什么。)
谓词下推是否会在.as(Encoders.kryo(MyObject.class))
操作后生效?
spark
.read()
.parquet(params.getMyObjectsPath())
// As I understand predicate pushdown will work here
// But I should construct MyObject from org.apache.spark.sql.Row manually
.as(Encoders.kryo(MyObject.class))
// QUESTION: will predicate pushdown work here as well?
.collectAsList();
答案 0 :(得分:1)
它无效。使用Encoders.kryo
后,您只得到一个blob
,它不会从列存储中获益,并且无法提供对单个字段的高效(无对象反序列化)访问,更不用说谓词下推或更高级优化
如果Encoders.bean
类允许,那么MyObject
可能会更好。通常,为了充分利用Dataset
优化,您至少需要一种可以使用更具体的编码器进行编码的类型。