在镶木地板上的地图类型列上使用spark-sql过滤下推

Vij*_*ati 5 dictionary predicate apache-spark parquet

我试图以嵌套的方式将我的数据存储在镶木地板中,并使用地图类型列将复杂对象存储为值.

如果有人可以让我知道过滤器下推是否适用于地图类型的列.例如下面是我的SQL查询 -

`select measureMap['CR01'].tenorMap['1M'] from RiskFactor where businessDate='2016-03-14' and bookId='FI-UK'`
Run Code Online (Sandbox Code Playgroud)

measureMap是一个映射,其键为String,值为自定义数据类型,包含2个属性 - String和另一个String,Double对映射.

我想知道下推是否可以在地图上工作,即如果map有10个键值对,Spark会将整个地图的数据带入memort并创建对象模型,否则它将根据I/O读取的键过滤掉数据水平.

另外我想知道是否有任何方法可以在where子句中指定键,类似于 - 其中measureMap.key ='CR01'?

Avi*_*rya 1

简而言之,答案是否定的。Parquet 谓词下推不适用于 mapType 列或嵌套 parquet 结构。
Spark Catalyst 优化器仅了解 Parquet 数据中的顶级列。它使用列类型、列数据范围、编码等最终生成查询的整个阶段代码。
当数据采用 MapType 格式时,无法从列中获取此信息。映射内可能有数百个键值对,而当前的 Spark 基础设施不可能进行谓词下推。