2017-08-03 49 views
2

镶木文档描述了几个不同的编码here如何设置星火平面文件编码

是读取的过程中以某种方式改变内部文件/写,或者我可以设置呢? Spark文档中没有任何关于它的内容。只有从Netflix团队的Ryan Blue的发言中找到slides。他将镶木地板配置设置为sqlContext

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

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

+0

星火提供了预定义的方法来读取/写入拼花文件的编码,如果这就是你要找的内容。 – philantrovert

+0

如何在写入过程中设置编码? F.E. dataFrame.write()。parquet() –

回答

4

所以我找到了答案,以我的Twitter工程blog问题。

实木复合地板有一个自动字典编码启用时,若干个唯一值< 10^5。 Here是一个后宣布镶木1.0具有自整定字典编码

UPD:

字典编码可以在SparkSession CONFIGS被切换:

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

关于由列的编码,有一个打开issue作为17日7月14日创建的Parquet Jira的改进。由于字典编码是默认设置,仅适用于所有表格,因此会关闭Delta Encoding(此错误为Jira issue)这是唯一适合数据的合适编码,例如几乎每个值都是唯一的时间戳。

UPD2

我们怎样才能知道并使用该输出文件,该文件编码?

  • 我为它使用了镶木地板工具。

    - > BREW安装地板的工具(适用于Mac)
    - >实木复合地板的工具,元your_parquet_file .snappy。实木复合地板

输出:

.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_DICTIONARY是它被用于在两列

-1

我不确定我是否理解了查询的整个范围(在这种情况下,请随时澄清)。

您可以指定使用蜂巢表存储选项 “CREATE TABLE SRC(ID INT)使用蜂巢OPTIONS(FILEFORMAT '实木复合地板')” reference

This one should be easier to follow and more comprehensive

读/写文件: VAL 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

OP知道如何创建parquet文件,但spec中有一个parquet文件有多种可能的编码,并且想知道这是否可以在spark中配置。 – puhlen