当前位置: 首页 > 面试题库 >

无法在Spark中配置ORC属性

呼延博易
2023-03-14
问题内容

我正在使用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):保存到文件时使用的压缩编解码器。这可以是公知的,不区分大小写缩短名称之一(nonesnappyzlib,和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”命令,在这里我没有写列名--但是得到了这个错误: