如何在Spark SQL中通过快速压缩将数据写入Hive表

时间:2019-03-02 10:31:03

标签: apache-spark

我有一个使用Hive命令创建的兽人配置单元表

create table orc1(line string) stored as orcfile

我想使用spark sql向该表中写入一些数据,我使用以下代码,并希望在HDFS上对数据进行快速压缩

  test("test spark orc file format with compression") {
    import SESSION.implicits._
    Seq("Hello Spark", "Hello Hadoop").toDF("a").createOrReplaceTempView("tmp")
    SESSION.sql("set hive.exec.compress.output=true")
    SESSION.sql("set mapred.output.compress=true")
    SESSION.sql("set mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec")
    SESSION.sql("set io.compression.codecs=org.apache.hadoop.io.compress.SnappyCodec")
    SESSION.sql("set mapred.output.compression.type=BLOCK")
    SESSION.sql("insert overwrite table orc1 select a from tmp  ")
  }

已写入数据,但已使用snnapy对其进行NOT压缩。

如果我在Hive Beeline / Hive中运行insert overwrite来写入数据并使用上面的set command,那么我可以看到该表的文件已用snappy压缩。

所以,我想问一下如何在Spark SQL 2.1中通过快速压缩将数据写入由Hive创建的orc表中

1 个答案:

答案 0 :(得分:0)

您可以像这样在create table命令中将压缩设置为snappy

create table orc1(line string) stored as orc tblproperties ("orc.compress"="SNAPPY");

然后,对表的所有插入都将进行快速压缩(我也在命令中将orcfile纠正为orc)。