gpt4 book ai didi

apache-spark - Spark Dataframe/Parquet 中的枚举等效项

转载 作者:行者123 更新时间:2023-12-04 05:20:14 25 4
gpt4 key购买 nike

我有一个包含数亿行的表,我想将其存储在 Spark 的数据帧中,并作为 Parquet 文件持久保存到磁盘。

我的 Parquet 文件的大小现在超过 2TB,我想确保我已经优化了它。

这些列中的很大一部分是字符串值,它们可能很长,但通常只有很少的值。例如,我有一列只有两个不同的值(一个 20 个字符和一个 30 个字符的字符串),我还有另一列的字符串平均长度为 400 个字符,但所有条目中只有大约 400 个不同的值。

在关系数据库中,我通常会将这些值标准化为带有引用的不同表,或者至少使用某种枚举类型定义我的表。

我在 DF 或 Parquet 文件中看不到与该模式匹配的任何内容。列式存储是否有效地处理了这个问题?或者我应该研究一些东西来进一步优化吗?

最佳答案

Parquet 没有自动生成类枚举类型的机制,但您可以使用页面字典。页字典存储每个 Parquet 页的值列表,以允许行仅引用回字典而不是重写数据。要在 spark 中为 Parquet 编写器启用字典:

spark.conf.set("parquet.dictionary.enabled", "true")
spark.conf.set("parquet.dictionary.page.size", 2 * 1024 * 1024)

请注意,您必须在启用这些选项的情况下编写文件,否则将不会使用它。

要使用字典启用过滤存在,您可以启用
spark.conf.set("parquet.filter.dictionary.enabled", "true")

Source: Parquet performance tuning:The missing guide

关于apache-spark - Spark Dataframe/Parquet 中的枚举等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44723938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com