Spark 2.3+ 使用 parquet.enable.dictionary?

Aci*_*der 7 apache-spark parquet

我正在寻找有关如何在 Spark(最新 2.3.1)中使用parquet.enable.dictionary 的文档。创建 SparkSession 时可以将其设置为“true”或“false”。

我在谷歌上搜索了有关此功能的任何文档,但一无所获,或者至少最近什么也没找到。

具体来说,这些是我的问题:

Spark 2.3.1 中默认是 parquet.filter.dictionary.enabled = true 还是 = false?

这是我写入 Parquet 文件之前启用(设置为 true)的功能,以便Spark 的 Parquet 库计算并将字典信息写入磁盘?

Spark 读取 Parquet 文件时是否忽略此设置,或者我是否仍需要将其设置为 true 以读取 Parquet(以及写入)?

我应该什么时候使用这个功能(设置为 true)?优点缺点?

当我在 google 上搜索 parquet.enable.dictionary 时,我也看到了对这个spark.hadoop.parquet.enable.dictionary 的引用。这有关系吗?我应该使用哪个?

我需要注意其他任何Spark + Parquet设置吗?

非常感谢!

Aja*_*ava 6

这些是默认设置为 false 的 spark parquet 配置 -

spark.sql.parquet.mergeSchema
spark.sql.parquet.respectSummaryFiles
spark.sql.parquet.binaryAsString
spark.sql.parquet.int96TimestampConversion
spark.sql.parquet.int64AsTimestampMillis
spark.sql.parquet.writeLegacyFormat
spark.sql.parquet.recordLevelFilter.enabled
Run Code Online (Sandbox Code Playgroud)

以下默认设置为 true -

spark.sql.parquet.int96AsTimestamp
spark.sql.parquet.filterPushdown
spark.sql.parquet.filterPushdown.date
spark.sql.parquet.filterPushdown.timestamp
spark.sql.parquet.filterPushdown.decimal
spark.sql.parquet.filterPushdown.string.startsWith
spark.sql.parquet.enableVectorizedReader
Run Code Online (Sandbox Code Playgroud)

这些属性需要值并使用默认值列出它-

spark.sql.parquet.outputTimestampType = INT96
spark.sql.parquet.compression.codec = snappy
spark.sql.parquet.pushdown.inFilterThreshold = 10
spark.sql.parquet.output.committer.class = org.apache.parquet.hadoop.ParquetOutputCommitter
spark.sql.parquet.columnarReaderBatchSize = 4096
Run Code Online (Sandbox Code Playgroud)

关于 parquet.enable.dictionary,Spark 尚不支持。但它可以在 sqlContext 中设置为 -

sqlContext.setConf("parquet.enable.dictionary", "false")
Run Code Online (Sandbox Code Playgroud)

此属性的默认值在镶木地板中为 true。因此,从 Spark 调用 parquet 代码时应该是这样。