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

时间:2017-08-03 15:11:43

标签: scala apache-spark apache-spark-sql parquet

Parquet文档描述了几种不同的编码here

在读/写期间它是否在文件内部以某种方式发生变化,或者我可以设置它? Spark文档中没有任何关于它的内容。只有来自Netflix团队的Ryan Blue的演讲才发现slides。他将镶木地板配置设置为sqlContext

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

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

2 个答案:

答案 0 :(得分:6)

所以我找到了关于twitter engineering blog的问题的答案。

当许多独特的值<1时,Parquet启用了自动字典编码。 10 ^ 5。 Here是宣布Parquet 1.0的帖子,其中包含自我调整字典编码

<强> UPD:

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

public void setFragment(Fragment fragmentWhichYouWantToShow) {

        fm = getSupportFragmentManager();
        ft = fm.beginTransaction();
        ft.replace(R.id.container, fragmentWhichYouWantToShow);
        ft.commit();

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

<强> UPD2

我们如何判断哪个编码用于输出文件?

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

    - &GT; brew安装实木复合地板工具(适用于mac)
    - &GT;实木复合地板工具meta your_parquet_file .snappy.parquet

输出:

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

PLAIN和PLAIN_DICTIONARY是用于该列的编码

答案 1 :(得分:-1)

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

您可以使用&#34; CREATE TABLE src(id int)指定配置单元表的存储选项使用配置单元选项(fileFormat&#39;镶嵌&#39;)&#34; reference

This one should be easier to follow and more comprehensive

读/写文件: val usersDF = spark.read.load(&#34; examples / src / main / resources / users.parquet&#34;) usersDF.select(&#34; name&#34;,&#34; favorite_color&#34;)。write.save(&#34; namesAndFavColors.parquet&#34;)

我还假设您可能已经检查过: - sqlContext.parquetFile(&#34; File_to_be_read.parquet&#34;) - myDataFrame.saveAsParquetFile(&#34; file_to_be_saved.parquet&#34;)