2014-11-24 112 views
0

我收到下面当我尝试在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并在本地运行程序。

回答

0

可能的原因,你得到的异常:

  1. 如果试图查询sqlContext不注册RDD为表。

    sqlContext.registerTempTable("testQuery")

  2. SparkSQL是大小写敏感的。确保tablename与你在Cassandra中定义的情况相符。

  3. 确保tablename`存在。

0

如果您查询已添加了alter table命令的列的分区配置单元表,则Spark 1.1中可能出现此问题。即使表架构知道新列,在添加新列之前创建的所有数据分区在其分区架构中都没有该表。

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

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

相关问题