请帮我写一个最佳的火花查询。我读过关于谓词下推的信息:
当您在加载 数据集,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();
它不起作用。使用Encoders.kryo
后,您只会得到一个blob
,它并没有真正受益于列式存储,并且不提供对单个字段的有效(没有对象反序列化)访问,更不用说谓词下推或更高级的优化了。
如果MyObject
类允许,你可以更好地使用Encoders.bean
。一般来说,要充分利用Dataset
优化,您至少需要一个可以使用更具体的编码器进行编码的类型。
相关 Spark 2.0 数据集与数据帧