我正在尝试以嵌套的方式在拼图中存储我的数据,并使用映射类型列将复杂的对象存储为值。
如果有人能告诉我过滤器下推是否适用于列或not.For的映射类型,下面的示例是我的sql查询-
`select measureMap['CR01'].tenorMap['1M'] from RiskFactor where businessDate='2016-03-14' and bookId='FI-UK'`measureMap是一个映射,关键字作为字符串,值作为自定义数据类型,包含2个属性-字符串和另一个字符串映射,双对。
我想知道下推是否会在map上起作用,例如,如果map有10个键值对,Spark会将整个map的数据存储在内存中并创建对象模型,或者它会在I/O读级别根据键过滤数据。
我还想知道有没有办法在where子句中指定关键字,比如- where measureMap.key = 'CR01‘?
发布于 2018-10-16 03:20:10
简短的回答是否定的。拼接谓词下推不适用于mapType列或嵌套拼接结构。
Spark catalyst优化器只理解拼图数据中的顶级列。它使用列类型、列数据范围、编码等最终生成查询的整个阶段代码。
当数据为MapType格式时,不可能从列中获取此信息。在一个map中可能有数百个键-值对,这在当前的spark基础设施中是不可能进行谓词下推的。
https://stackoverflow.com/questions/37939029
复制相似问题