当前位置: 首页 > 知识库问答 >
问题:

spark在读取配置单元表时抛出错误

居乐池
2023-03-14

我试图在配置单元中执行select*from db.abc操作,此配置单元表是使用spark加载的

“它不工作”显示错误:

错误:java.io.IOException:java.lang.IllegalArgumentException:bucketId超出范围:-1(状态=,代码=0)

set hive.mapred.mode=nonstrict;
set hive.optimize.ppd=true;
set hive.optimize.index.filter=true;
set hive.tez.bucket.pruning=true;
set hive.explain.user=false; 
set hive.fetch.task.conversion=none;

我需要在spark-submit或shell中添加任何属性吗?或者使用spark读取此hiv e表的另一种方法是什么

配置单元表示例格式

  CREATE TABLE `hive``(                   |
|   `c_id` decimal(11,0),etc.........       
  ROW FORMAT SERDE                                   |
|   'org.apache.hadoop.hive.ql.io.orc.OrcSerde'      |
| WITH SERDEPROPERTIES (  
 STORED AS INPUTFORMAT                              |
|   'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'  |
| OUTPUTFORMAT                                       |
|   'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' |
 LOCATION                                           |
|  path= 'hdfs://gjuyada/bbts/scl/raw' |
| TBLPROPERTIES (                                    |
|   'bucketing_version'='2',                         |
|   'spark.sql.create.version'='2.3.2.3.1.0.0-78',   |
|   'spark.sql.sources.provider'='orc',              |
|   'spark.sql.sources.schema.numParts'='1',         |
|   'spark.sql.sources.schema.part.0'='{"type":"struct","fields":
[{"name":"Czz_ID","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"DzzzC_CD","type":"string","nullable":true,"metadata":{}},
{"name":"C0000_S_N","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"P_ _NB","type":"decimal(11,0)","nullable":true,"metadata":{}},
{"name":"C_YYYY","type":"string","nullable":true,"metadata":{}},"type":"string","nullable":true,"metadata":{}},{"name":"Cv_ID","type":"string","nullable":true,"metadata":{}},
|   'transactional'='true',                          |
|   'transient_lastDdlTime'='1574817059')  

共有1个答案

丁星火
2023-03-14

您试图将transactional table(transactional=true)读取到Spark中的问题。

配置单元acid表还不支持正式的Spark,将acid表的完全转储/增量转储转换到常规的配置单元ORC/Parquet分区表,然后使用Spark读取数据

有一个开放的Jira saprk-15348来添加对读取hive acid表的支持。

>

  • 如果您在Acid表(从配置单元)上运行major compaction,则可以只读取base_xxx目录,而不能读取在该JIRA中寻址的delta目录Spark-16996。

    有一些使用SPARK-LLAP读取acid表的变通方法,如本链接所述。

    我认为从HDP-3.x开始,HiveWarehouseSeconnector能够支持读取HiveAcid表。

    您可以将事务性表的快照创建为非事务性,然后从该表读取数据。

    创建表 作为orc存储为select*from

    更新:

     CREATE external TABLE `<ext_tab_name>`(  
           <col_name>       <data_type>....etc
               )
        stored as orc
        location '<path>';
    
     insert overwrite table <ext_tab_name> select * from <transactional_tab_name>;
    

  •  类似资料:
    • 我正在尝试从db中选择*。abc在蜂箱中,这个蜂箱表是使用spark加载的 它不工作显示错误: 错误:java。伊奥。IOException:java。lang.IllegalArgumentException:bucketId超出范围:-1(状态=,代码=0) 当我使用以下属性时,我能够查询配置单元: 现在,当我尝试读取相同的hive表db.abc使用火花,我收到的错误如下: 客户端只有在具有以

    • 我试图从Spark Sql将数据插入到Hive外部表中。我通过以下命令创建了hive外部表 在spark工作中,我编写了以下代码Dataset df=session。read()。选项(“标题”、“真”)。csv(csvInput); 每次运行这段代码时,我都会遇到以下异常

    • 我正在使用Spark SQL读取一个配置单元表,并将其分配给一个scala val 有什么方法可以绕过这个错误吗?我需要将记录插入到同一个表中。 嗨,我试着按建议做,但仍然得到同样的错误。

    • 我有一个奇怪的错误,我正在尝试写数据到hive,它在spark-shell中运行良好,但是当我使用spark-submit时,它抛出的数据库/表在默认错误中找不到。 下面是我试图在spark-submit中编写的代码,我使用的是Spark2.0.0的自定义构建 16/05/20 09:05:18 INFO sparksqlParser:解析命令:spark_schema.measures_2016

    • states是按国家分区的,所以当我对上面的数据集进行计数时,查询会扫描所有分区。但是如果我这样读的话- 分区被正确修剪。有人能解释为什么当您将表映射到case类时会丢失分区信息吗?

    • 我试图在RDD中将PostgreSQL 9.6中的一个表读取到Spark 2.1.1中,我在Scala中有以下代码。 但是,它返回以下错误: 组织。阿帕奇。火花SparkException:作业因阶段失败而中止:阶段1.0中的任务0失败4次,最近的失败:阶段1.0中的任务0.3丢失(TID 7,10.0.0.13,执行者1):组织。postgresql。util。PSQLException:列索引