如何在parquet模式中有效地表示集合成员身份或其他二进制属性?

ioekq8ef  于 2021-07-14  发布在  Spark
关注(0)|答案(0)|浏览(181)

我正在设计一个模式,在这个模式中,我希望将每一行中的数据注解为属于某个可变的标记集。我希望模式不需要随着标记的创建和删除而更改,并且它应该能够高效地存储标记集,还可以使用 predicate 下推(predicate pushdown)进行按标记过滤行的spark查询。
例如,假设我的数据集中的行表示堆栈溢出post。我想在一列中存储一组标签,这些标签来自一组有限但不断变化的类。我还想快速选择所有有标签的帖子 [parquet] 或者可能是标记的连接(不清楚标记的连接是一个严格的要求,但最好有)。我的应用程序将有10s-100s的标签,大多数行都有<10个标签。
一种方法是使用位字段。您可以有一个uint\u64列,为每个标记分配一个位索引。这对于存储(每行8个字节)和使用位运算符进行过滤非常有效。这种方法的缺点是,您最多只能使用64个类,并且必须将从标记到位索引的Map存储在一些辅助存储中。
在Parquet地板中实现这一点的明显方法是使用字符串列表。这应该压缩得很好,因为有很多重复的字符串。然而,我想知道在select中使用这个有多有效,是否有更好的方法。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题