Spark SQL:未解析的属性

时间:2014-11-24 20:07:19

标签: apache-spark-sql

当我尝试读取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并在本地运行该程序。

2 个答案:

答案 0 :(得分:0)

您获得例外的可能原因:

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

    sqlContext.registerTempTable("testQuery")

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

  3. 确保tablename存在。

答案 1 :(得分:0)

如果要查询已使用alter table命令添加了列的分区配置单元表,则可能会在Spark 1.1中发生此问题。即使表模式知道新列,在添加新列之前创建的任何数据分区在其分区模式中都没有该表。

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

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