2015-10-17 43 views
1

我想讀取來自cassandra keyspace和column_family的數據框。運行sparkR時,我正在調用相應的spark-cassandra-connector軟件包,並將conf設置爲我的本地spark cassandra主機。運行下面的代碼時不會出現任何錯誤。sparkR與Cassandra

$ ./bin/sparkR --packages com.datastax.spark:spark-cassandra-connector_2.10:1.5.0-M2 --conf spark.cassandra.connection.host=127.0.0.1 
sc <- sparkR.init(master="local") 
sqlContext <- sparkRSQL.init(sc) 
people <-read.df(sqlContext, 
    source = "org.apache.spark.sql.cassandra", 
    keyspace = "keyspace_name", table = "table_name") 

我碰到下面的錯誤,

Error in writeJobj(con, object) : invalid jobj 1 

我必須的conf傳遞到sparkContext分配(SC),並在sparkR怎麼樣?

下面是我的火花和卡桑德拉版本,

星火:1.5.1 卡桑德拉:2.1.6 卡桑德拉連接器更新爲使用1.5.0-M2每zero323建議

這裏是一個要點,以我的堆棧跟蹤。

https://gist.github.com/bhajer3/419561edcb0dc5db2f71

編輯

我可以創建表格不包括任何卡桑德拉收集的數據類型的數據幀, 如地圖,集和列表。但是,我需要數據的許多模式都包含這些集合數據類型。

因此,當讀取來自Cassandra密鑰空間和column_family的數據幀時,sparkR不支持cassandra集合數據類型。看到我的詳細報告/測試程序。

https://gist.github.com/bhajer3/c3effa92de8e3cfc4fee

+0

幾個注意事項:1)請不要發佈更新或其他問題作爲答案。2)如果您解決了問題並遇到另一個問題,請不要編輯問題以更改範圍,而是解決現有問題並請求新問題。否則,您將使現有答案無效並減少其他用戶問題的價值。 3)如果你有一個可以用來重現問題的代碼,請把它作爲問題本身的一部分。只有當它是一個活生生的例子時,外部源纔有意義(sqlfiddle,jsbin) – zero323

+0

對於@ zero323將會這樣做,感謝您的幫助。 –

+0

當然,我已經提供了一個解釋,爲什麼收集複雜類型不適用於1.5。它根本不被支持。 – zero323

回答

1

最初的問題

一般來說,你一定要配合星火,spark-cassandra-connector和卡桑德拉版本。連接器版本應該匹配主要的Spark版本(Spark 1.5的連接器1.5,Spark 1.4的連接器1.4等)。

與Cassandra版本的兼容性有點棘手,但您可以在connector README.md中找到兼容版本的完整列表。

編輯

SparkR < 1.6不支持收集複雜的數據類型,包括陣列或地圖。它已被SPARK-10049解決。如果您構建Spark表單主控,則按預期工作。對於1.6,沒有cassandra-connector,但1.5-M2看起來工作得很好,至少在DataFrame API中是如此。

注意

它看起來像連接器1.5-M2錯誤地報告Date鍵作爲Timestamps所以請小心,如果你在你的數據庫中使用它們。