我试图在本地模式下运行spark来编写测试。我在SparkSql中使用Hive支持来获取代码中的一些查询。
SparkConf sparkConf = new SparkConf()
.setMaster("local")
.setAppName("Test")
.set("spark.ui.enabled", "false");
javaSparkContext = new JavaSparkContext(sparkConf);
hiveContext = new HiveContext(javaSparkContext.sc());
File directory = Files.createTempDir();
hiveContext.sql("DROP TABLE prefixes");
hiveContext.sql("Create EXTERNAL table prefixes (prefix string) LOCATION \""+ directory.getAbsolutePath()+"\"");
当我用where子句
查询表“前缀”时hiveContext.sql("Select prefix from prefixes where prefix = '94C'");
失败并出现以下错误
Unsupported language features in query: select prefix from prefixes where prefix = '94C'
TOK_QUERY 1, 0,14, 19
TOK_FROM 1, 4,6, 19
TOK_TABREF 1, 6,6, 19
TOK_TABNAME 1, 6,6, 19
prefixes 1, 6,6, 19
TOK_INSERT 0, -1,14, 0
TOK_DESTINATION 0, -1,-1, 0
TOK_DIR 0, -1,-1, 0
TOK_TMP_FILE 0, -1,-1, 0
TOK_SELECT 1, 0,2, 7
TOK_SELEXPR 1, 2,2, 7
TOK_TABLE_OR_COL 1, 2,2, 7
prefix 1, 2,2, 7
TOK_WHERE 1, 8,14, 52
= 1, 10,14, 52
TOK_TABLE_OR_COL 1, 10,10, 45
prefix 1, 10,10, 45
'94C' 1, 14,14, 54
scala.NotImplementedError: No parse rules for ASTNode type: 298, text: '94C' :
'94C' 1, 14,14, 54
" +
org.apache.spark.sql.hive.HiveQl$.nodeToExpr(HiveQl.scala:1558)
;
maven中使用的库
<!--Spark Dependencies-->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.10</artifactId>
<version>1.4.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.10</artifactId>
<version>1.4.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.10</artifactId>
<version>1.4.0</version>
<scope>provided</scope>
</dependency>
当我在纱线主模式下运行时,相同的代码正在我的群集上工作。
有人看到过这样的问题或知道该怎么做吗?
答案 0 :(得分:0)
这是因为Cloudera dist包含了hive依赖。将上述依赖项移到依赖项列表的顶部解决了问题