0

我有一個Cassandra表trans_by_date與列來源,tran_date(和一些其他列)。我嘗試運行下面的代碼獲取錯誤:Cassandra查詢列映射

java.util.NoSuchElementException: Columns not found in table trans.trans_by_date : TRAN_DATE. The column does exist. 

任何語法gotcha?

JavaRDD<TransByDate> transDateRDD = javaFunctions(sc) 
.cassandraTable("trans", "trans_by_date", CassandraJavaUtil.mapRowTo(TransByDate.class)) 
.select(CassandraJavaUtil.column("origin"), CassandraJavaUtil.column("TRAN_DATE").as("transdate")); 


public static class TransByDate implements Serializable { 
     private String origin; 
     private Date transdate; 

    public String getOrigin() { return origin; } 
     public void setOrigin(String id) { this.origin = id; } 

     public Date getTransdate() { return transdate; } 
     public void setTransdate(Date trans_date) { this.transdate = trans_date; } 
} 

感謝

回答

1

如果更改CassandraJavaUtil.column( 「TRAN_DATE」),以CassandraJavaUtil.column( 「tran_date」),即只使用小寫列名,你的代碼應該工作。

似乎CassandraJavaUtil創建選擇查詢時將列名放入雙引號。

請參見以下鏈接大寫和小寫處理在卡桑德拉: https://docs.datastax.com/en/cql/3.3/cql/cql_reference/ucase-lcase_r.html

+0

設置爲小寫解決了這個問題。然後出現新問題:'無法將類spark.SparkTest $ TransByDate中的構造函數參數id映射到trans.trans_by_date列 無法將類spark.SparkTest $ TransByDate中的構造函數參數tran_date映射到trans.trans_by_date'列所以我已經將兩個方法變量名稱 - id更改爲原點,tran_date更改爲trandate - 以匹配類別變量名稱。那麼如果這是它工作的唯一方式。 –

+1

@ Sam-T對不起,但我認爲加入原始問題的答案並不是這個論壇打算工作的方式。現在沒有其他人理解這個問題,答案也不再匹配。我會建議恢復所做的更改,並將這些信息作爲附加評論添加到我的答案中。 – Philip

+0

@ Sam-T謝謝你回覆你對這個問題的修改。我無法重現您使用_Failed來映射構造函數parameter_ message的第二個問題。也許它取決於spark-cassandra-connector的版本(我使用版本1.6)。由於我的答案解決了原始問題,您能否將答案標記爲正確?然後其他用戶知道問題已解決。 – Philip