无法在Spark中配置ORC属性

我正在使用Spark 1.6(Cloudera 5.8.2),并尝试了以下方法来配置ORC属性。但这不会影响输出。

以下是我尝试过的代码段。

 DataFrame dataframe =

hiveContext.createDataFrame(rowData, schema);

dataframe.write().format("orc").options(new HashMap(){

{

put("orc.compress","SNAPPY");

put("hive.exec.orc.default.compress","SNAPPY");

put("orc.compress.size","524288");

put("hive.exec.orc.default.buffer.size","524288");

put("hive.exec.orc.compression.strategy", "COMPRESSION");

}

}).save("spark_orc_output");

除此之外,我还尝试了在hive-site.xml和hiveContext对象中设置的这些属性。

hive –orcfiledump在输出中确认未应用配置。以下是Orcfiledump代码段。

Compression: ZLIB

Compression size: 262144

回答:

您在这里犯了两个不同的错误。我不怪你 我去过那儿…

orc.compress和其余的不是Spark DataFrameWriter选项。它们是Hive配置属性,必须

创建hiveContext对象 之前 定义…

  • 无论是在hive-site.xml提供给星火在启动时
  • 或在您的代码中,通过重新创建SparkContext

sc.getConf.get("orc.compress","<undefined>") // depends on Hadoop conf

sc.stop

val scAlt = new org.apache.spark.SparkContext((new

org.apache.spark.SparkConf).set("orc.compress","snappy"))

scAlt.getConf.get("orc.compress","<undefined>") // will now be Snappy

val hiveContextAlt = new org.apache.spark.sql.SQLContext(scAlt)

[编辑]使用Spark 2.x时,脚本将变为…

spark.sparkContext.getConf.get("orc.compress","<undefined>") // depends on

Hadoop conf

spark.close

val sparkAlt =

org.apache.spark.sql.SparkSession.builder().config("orc.compress","snappy").getOrCreate()

sparkAlt.sparkContext.getConf.get("orc.compress","<undefined>") // will now

be Snappy

Spark将自己的SerDe库用于ORC(以及Parquet,JSON,CSV等),因此不必遵循标准的Hadoop / Hive属性。

Parquet有一些Spark特定的属性,并且有据可查。但是同样,必须 创建(或重新创建) 之前

设置这些属性hiveContext

对于ORC和其他格式,您必须求助于特定于格式的DataFrameWriter选项。引用最新的JavaDoc

您可以设置以下特定于ORC的选项来编写ORC文件:

compression(默认值snappy):保存到文件时使用的压缩编解码器。这可以是公知的,不区分大小写缩短名称之一(nonesnappyzlib,和lzo)。这将覆盖orc.compress

请注意,默认压缩编解码器已在Spark 2中更改; 在那之前zlib

因此,您唯一可以设置的是压缩编解码器,使用

dataframe.write().format("orc").option("compression","snappy").save("wtf")

以上是 无法在Spark中配置ORC属性 的全部内容, 来源链接: utcz.com/qa/414007.html

回到顶部