【发布时间】:2019-12-29 12:58:07
【问题描述】:
我有一个在 S3 之上创建的简单 Hive-External 表(文件为 CSV 格式)。当我运行配置单元查询时,它会显示所有记录和分区。
但是,当我在 Spark 中使用同一张表时(其中 Spark SQL 在分区列上有 where 条件),它并没有显示应用了分区过滤器。但是对于 Hive 托管表,Spark 能够使用分区信息并应用分区过滤器。
是否有任何标志或设置可以帮助我在 Spark 中使用 Hive 外部表的分区?谢谢。
更新:
由于某种原因,只有 spark 计划没有显示分区过滤器。但是,当您查看加载的数据时,它只会从分区加载所需的数据。
例如:在 rating=0 时,仅加载一个 1 MB 的文件,当我没有过滤时,它读取所有 3 个分区为 3 MB
【问题讨论】:
-
如果在对 hive 管理的表的查询中将“where movieid in (10,12)”替换为“where rating=0”会发生什么?我怀疑“PartitionFilters:...”在这种情况下会消失。如果您在“where”子句中仅包含特定分区,则可能不会调用过滤器
-
啊,hive 管理表中的分区是“movieid”,而不是“rating”,对吧?那时我的推理是错误的
-
@mangusta 我知道混乱会用细节更新问题
-
你可以尝试将 where 子句值作为字符串而不是 int - 比如 where rating='0'
-
这里有点不清楚
标签: apache-spark hive apache-spark-sql