0

当我尝试读取 sql 结果的计数时收到以下错误:

错误:

Exception in thread "main" org.apache.spark.sql.catalyst.errors.package$TreeNodeException: Unresolved attributes

这是我正在使用的代码:

val results= sqlContext.sql("select * from  tablename")
results.collect().foreach(println)

我正在使用 Spark 1.1.0 并在本地运行该程序。

4

2 回答 2

0

您收到异常的可能原因:

  1. 如果您尝试查询 sqlContext 而不将 RDD 注册为表。

    sqlContext.registerTempTable("testQuery")

  2. SparkSQL 区分大小写。确保tablename匹配您在 Cassandra 中定义的大小写。

  3. 确保 tablename 存在。

于 2015-06-19T20:35:14.827 回答
0

如果您正在查询已使用 alter table 命令添加了列的分区 hive 表,则此问题可能会出现在 Spark 1.1 中。即使表架构知道新列,在添加新列之前创建的任何数据分区都不会在其分区架构中包含该表。

Select * 将从表模式中提取列列表,但是当它处理较旧的数据分区时,由于分区模式中不存在该列,因此 Spark 将找不到该列,因此会抛出此未解决的属性错误。

如果这是您面临的问题,那么不要使用 select *,而是指定一个明确的列名列表。不过,这只是部分解决方案,因为如果您明确列出旧分区中不存在的列名,那么您仍然会收到错误消息。

于 2015-09-10T20:45:38.570 回答