2015-10-17 47 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所以请小心,如果你在你的数据库中使用它们。