我正在使用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
您在这里犯了两个不同的错误。我不怪你 我去过那儿…
问题1
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.SparkSesshtml" target="_blank">ion.builder().config("orc.compress","snappy").getOrCreate()
sparkAlt.sparkContext.getConf.get("orc.compress","<undefined>") // will now be 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")
我创建了一个兽人蜂巢表,如下所示: 但是在spark jobs控制台中:它显示了与上述查询跳过的阶段(1)相关的一个作业--spark JDBC服务器查询
问题内容: 在Swift中,我尝试执行以下操作: Xcode 在方法中在线上报告错误。 为什么?如果将结构更改为类,则不会出错。 问题答案: 如果要修改结构的属性,请将该函数标记为mutating。
在默认情况下加载的文件夹中有一个类型安全配置。 可以通过指定以下内容重写单个值: 将无法加载。相反,将加载resources文件夹中的原始文件。尝试以下技巧:在纱线上使用typesafe config和Spark也没有帮助。 当使用uberjar部署时,重写类型安全配置中的多个配置值似乎是普通(没有spark)程序的解决方案。问题仍然是如何使这一点产生火花。 同样通过的是: https://git
注意:我没有在该表上应用任何分区或桶,如果应用桶,我甚至无法查看存储为ORC Hive版本:1.2.1 Spark版本:1.4.1 Scala版本:2.10.6的数据
我有一个配置单元表保存在ORC文件中,这是“create”命令中的定义: 我想从末尾删除一个列,所以我尝试了“alter table-replace columns”命令,在这里我没有写列名--但是得到了这个错误: