.as(Encoders.kryo)之后的数据集谓词推论

时间:2017-01-05 11:06:43

标签: apache-spark apache-spark-sql

请帮我写一个最佳的火花查询。我读过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();

1 个答案:

答案 0 :(得分:1)

它无效。使用Encoders.kryo后,您只得到一个blob,它不会从列存储中获益,并且无法提供对单个字段的高效(无对象反序列化)访问,更不用说谓词下推或更高级优化

如果Encoders.bean类允许,那么MyObject可能会更好。通常,为了充分利用Dataset优化,您至少需要一种可以使用更具体的编码器进行编码的类型。

相关Spark 2.0 Dataset vs DataFrame