您在这里犯了两个不同的错误。我不怪你 我去过那儿…
问题1
orc.compress和其余的不是Spark
DataframeWriter选项。它们是Hive配置属性,必须 在
创建
hiveContext对象 之前 定义…
- 无论是在
hive-site.xml
提供给星火在启动时 - 或在您的代码中,通过重新创建
SparkContext
…
sc.getConf.get("orc.compress","<undefined>") // depends on Hadoop confsc.stop
val scAlt = new org.apache.spark.SparkContext((neworg.apache.spark.SparkConf).set("orc.compress","snappy"))scAlt.getConf.get("orc.compress","<undefined>") // will now be Snappyval hiveContextAlt = new org.apache.spark.sql.SQLContext(scAlt)
[编辑]使用Spark 2.x时,脚本将变为…
spark.sparkContext.getConf.get("orc.compress","<undefined>") // depends onHadoop confspark.close
val sparkAlt =org.apache.spark.sql.SparkSession.builder().config("orc.compress","snappy").getOrCreate()sparkAlt.sparkContext.getConf.get("orc.compress","<undefined>") // will nowbe Snappy 问题#2
Spark将自己的SerDe库用于ORC(以及Parquet,JSON,CSV等),因此不必遵循标准的Hadoop / Hive属性。
Parquet有一些Spark特定的属性,并且有据可查。但是同样,必须 在 创建(或重新创建) 之前
设置这些属性
hiveContext。
对于ORC和其他格式,您必须求助于特定于格式的
DataframeWriter选项。引用最新的JavaDoc
…
您可以设置以下特定于ORC的选项来编写ORC文件:
•compression(默认值snappy):保存到文件时使用的压缩编解码器。这可以是公知的,不区分大小写缩短名称之一(none,snappy,zlib,和lzo)。这将覆盖orc.compress
请注意,默认压缩编解码器已在Spark 2中更改; 在那之前zlib
因此,您唯一可以设置的是压缩编解码器,使用
dataframe.write().format("orc").option("compression","snappy").save("wtf")


