本地模式下的SparkSql Hive无法解析查询中的常量

时间:2015-09-15 15:22:48

标签: apache-spark hive apache-spark-sql

我试图在本地模式下运行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>

当我在纱线主模式下运行时,相同的代码正在我的群集上工作。

有人看到过这样的问题或知道该怎么做吗?

1 个答案:

答案 0 :(得分:0)

这是因为Cloudera dist包含了hive依赖。将上述依赖项移到依赖项列表的顶部解决了问题