2014-11-24 71 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 *,而是指定一個明確的列名稱列表。但這只是一個部分解決方案,因爲如果您明確列出舊分區中不存在的列名,那麼您仍然會得到該錯誤。