Parquet文档描述了几种不同的编码here它在读/写过程中以某种方式改变了文件内部,或者我可以设置它?Spark文档中没有任何相关信息。只找到slides从speach由瑞安蓝从Netflix团队。他将parquet配置设置为sqlContext
sqlContext.setConf("parquet.filter.dictionary.enabled", "true")
看起来这不是关于Parquet文件中的普通字典编码。
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
我们如何判断输出文件使用了哪种编码?
-> 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是用于该列的编码
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>
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”)
3条答案
按热度按时间9w11ddsr1#
所以我在twitter engineering blog上找到了我问题的答案。
当唯一值的数量< 10^5时,Parquet会启用自动字典编码。Here是一个宣布Parquet 1.0与自调优字典编码的帖子
UPD:
字典编码可以在SparkSession配置中切换:
关于按列编码,有一个开放的issue,作为Parquet的Jira的改进,于17年7月14日创建。由于字典编码是默认的,并且仅适用于所有表,因此它关闭了Delta编码(针对此错误的Jira issue),这是唯一适合于时间戳等数据的编码,其中几乎每个值都是唯一的。
更新2
我们如何判断输出文件使用了哪种编码?
-> brew install parquet-tools(for mac)
-> parquet-tools meta your_parquet_file.snappy.parquet
输出:
其中PLAIN和PLAIN_DICTIONARY是用于该列的编码
nvbavucw2#
加上阿尔特姆的回答,parquet-tools已经被标记为不推荐使用,不能再通过自制软件安装。运行此工具的另一种方法是使用parquet-mr的一个较旧的分支
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”)