当前位置:  开发笔记 > 编程语言 > 正文

无法在Spark中配置ORC属性

如何解决《无法在Spark中配置ORC属性》经验,为你挑选了1个好方法。



1> Samson Schar..:

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

问题1
orc.compress和其余的不是Spark DataFrameWriter选项。它们是Hive配置属性,必须创建hiveContext对象之前定义...

无论是在hive-site.xml提供给星火在启动时

或在您的代码中,通过重新创建SparkContext...

 sc.getConf.get("orc.compress","") // 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","") // will now be Snappy
 val hiveContextAlt = new org.apache.spark.sql.SQLContext(scAlt)

[编辑]使用Spark 2.x,脚本将变为...
 spark.sparkContext.getConf.get("orc.compress","") // 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","") // will now be Snappy

问题#2
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")

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有