scala 如何在Spark中设置Parquet文件编码

puruo6ea  于 2023-05-17  发布在  Scala
关注(0)|答案(3)|浏览(279)

Parquet文档描述了几种不同的编码here
它在读/写过程中以某种方式改变了文件内部,或者我可以设置它?Spark文档中没有任何相关信息。只找到slides从speach由瑞安蓝从Netflix团队。他将parquet配置设置为sqlContext

sqlContext.setConf("parquet.filter.dictionary.enabled", "true")

看起来这不是关于Parquet文件中的普通字典编码。

9w11ddsr

9w11ddsr1#

所以我在twitter engineering blog上找到了我问题的答案。
当唯一值的数量< 10^5时,Parquet会启用自动字典编码。Here是一个宣布Parquet 1.0与自调优字典编码的帖子

UPD:

字典编码可以在SparkSession配置中切换:

SparkSession.builder
            .appName("name")
            .config("parquet.enable.dictionary","false") //true

关于按列编码,有一个开放的issue,作为Parquet的Jira的改进,于17年7月14日创建。由于字典编码是默认的,并且仅适用于所有表,因此它关闭了Delta编码(针对此错误的Jira issue),这是唯一适合于时间戳等数据的编码,其中几乎每个值都是唯一的。

更新2

我们如何判断输出文件使用了哪种编码?

  • 我用 parquet 的工具。

-> brew install parquet-tools(for mac)
-> parquet-tools meta your_parquet_file.snappy.parquet
输出:

.column_1: BINARY SNAPPY DO:0 FPO:16637 SZ:2912/8114/3.01 VC:26320 ENC:RLE,PLAIN_DICTIONARY,BIT_PACKED
.column_2: BINARY SNAPPY DO:0 FPO:25526 SZ:119245/711487/1.32 VC:26900 ENC:PLAIN,RLE,BIT_PACKED
.

其中PLAIN和PLAIN_DICTIONARY是用于该列的编码

nvbavucw

nvbavucw2#

加上阿尔特姆的回答,parquet-tools已经被标记为不推荐使用,不能再通过自制软件安装。运行此工具的另一种方法是使用parquet-mr的一个较旧的分支

git clone https://github.com/apache/parquet-mr.git
git checkout tags/apache-parquet-1.8.1
cd parquet-mr/parquet-tools
mvn clean package -Plocal
java -jar target/parquet-tools-1.8.1.jar meta <your_parquet_file.snappy.parquet>
zqry0prt

zqry0prt3#

我不确定我是否已经理解了你的查询的整个范围(如果是这样的话,请随时澄清)。
可以使用“CREATE TABLE src(id int)USING hive OPTIONS(fileFormat 'parquet')”引用为配置单元表指定存储选项
这一条应该更容易理解,也更全面
读/写文件:瓦尔usersDF = spark.read.load(“examples/src/main/resources/users.parquet”)usersDF.select(“name”,“favorite_color”). write.save(“namesAndFavColors.parquet”)
我还假设你已经检查过了:- sqlContext.parquetFile(“File_to_be_read.parquet”)- myDataFrame.saveAsParquetFile(“file_to_be_saved.parquet”)

相关问题