当我尝试读取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 :(得分:0)
您获得例外的可能原因:
如果您尝试查询sqlContext而未将RDD注册为表。
sqlContext.registerTempTable("testQuery")
SparkSQL区分大小写。确保tablename
与您在Cassandra中定义的案例相匹配。
确保tablename存在。
答案 1 :(得分:0)
如果要查询已使用alter table命令添加了列的分区配置单元表,则可能会在Spark 1.1中发生此问题。即使表模式知道新列,在添加新列之前创建的任何数据分区在其分区模式中都没有该表。
Select *将从表模式中提取列的列表,但是当它处理旧数据分区时,由于该列在分区模式中不存在,因此spark将找不到该列,因此将抛出此未解析的属性错误。
如果这是您面临的问题,那么请指定明确的列名列表,而不是使用select *。但这只是一个部分解决方案,因为如果您明确列出旧分区中不存在的列名,那么您仍然会收到错误。