2016-08-03 94 views
6

背景从蜂巢交易启用表结果: -无法撷取通过火花SQL

  • 我使用HDP与spark1.6.0和分群1.2.1

随后的步骤: -

创建一个蜂巢表: -

hive> 
CREATE TABLE orctest(PROD_ID bigint, CUST_ID bigint, TIME_ID timestamp, CHANNEL_ID bigint, PROMO_ID bigint, QUANTITY_SOLD decimal(10,0), AMOUNT_SOLD decimal(10,0)) CLUSTERED BY (PROD_ID) INTO 32 BUCKETS STORED AS ORC TBLPROPERTIES ("orc.compress"="SNAPPY", "transactional"="true"); 

记录插入orctest

hive> 
insert into orctest values(1, 1, '2016-08-02 21:36:54.000000000', 1, 1, 10, 10000); 

尝试从访问orctest表火花外壳

scala> 
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc) 

val s = hiveContext.table("orctest")* 

抛出异常: -

16/08/02 22:06:54 INFO OrcRelation: Listing hdfs://hadoop03:8020/apps/hive/warehouse/orctest on driver 
16/08/02 22:06:54 
INFO OrcRelation: Listing hdfs://hadoop03:8020/apps/hive/warehouse/orctest/delta_0000005_0000005 on driver 
**java.lang.AssertionError: assertion failed** 
at scala.Predef$.assert(Predef.scala:165) 
at org.apache.spark.sql.execution.datasources.LogicalRelation$$anonfun$1.apply(LogicalRelation.scala:39) 
at org.apache.spark.sql.execution.datasources.LogicalRelation$$anonfun$1.apply(LogicalRelation.scala:38) 
at scala.Option.map(Option.scala:145) 
at org.apache.spark.sql.execution.datasources.LogicalRelation.<init>(LogicalRelation.scala:38) 
at org.apache.spark.sql.execution.datasources.LogicalRelation.copy(LogicalRelation.scala:31) 
at org.apache.spark.sql.hive.HiveMetastoreCatalog.org$apache$spark$sql$hive$HiveMetastoreCatalog$$convertToOrcRelation(HiveMetastoreCatalog.scala:588) 

任何帮助将非常感激。

+0

看一看http://stackoverflow.com/questions/27171702/error-in-scala-compiler-java-lang-assertionerror-assertion-failed-even-when-p – BruceWayne

+0

感谢奎师那的评论。 但我没有尝试过这个与scala项目,我直接尝试这在spark-shell。 我的想法: - 如果你创建一个跨国属性为真的配置单元表,那么你不能够通过火花访问表格的内容(请纠正我,如果我错了) PS:我正在使用HDP Spark 1.6.0和配置单元1.2.1) –

+0

我也面临类似的问题。我无法将启用事务的表加载到火花数据框。你有没有找到解决这个问题的方法?在尝试加载之前,我尝试使用sqlContext.setConf()设置配置单元事务属性。我也尝试在源交易表上创建一个视图,并从火花点击视图,但无济于事 –

回答

2

尝试设置:hiveContext.setConf("spark.sql.hive.convertMetastoreOrc", "false")