连接/集成Cassandra和Spark(pyspark)

时间:2015-10-29 14:43:19

标签: cassandra apache-spark pyspark

我拼命想把Cassandra连接到pyspark但是我无法让它工作。我对Spark和cassandra很新,所以我可能会错过一些相当简单的东西。

我对网上所有不同的解释感到有些困惑,但是根据我的理解,最简单的方法是使用“Spark包”? (http://spark-packages.org/package/TargetHolding/pyspark-cassandra

因此,使用以下命令:

./bin/spark-submit --packages com.datastax.spark:spark-cassandra-connector_2.11:1.5.0-M2 ../Main/Code/myPysparkFile.py

如果我使用如上所述的火花套餐,我是否理解我不需要下载任何套餐?

myPysparkFile.py中的

我尝试了以下两个版本,我都没有为我工作:

版本1,我从http://www.slideshare.net/JonHaddad/intro-to-py-spark-and-cassandra的第14页获得:

"SparkCassandraTest.py"
from pyspark import SparkContext, SparkConf
from pyspark_cassandra import CassandraSparkContext,Row

conf = SparkConf()
conf.setMaster("local[4]")
conf.setAppName("Spark Cassandra")
conf.set("spark.cassandra.connection.host","http://127.0.0.1")

sc = CassandraSparkContext(conf=conf)

rdd = sc.cassandraTable("test", "words")

作为一个错误我得到:

ImportError: No module named pyspark_cassandra

第2版(灵感来自:https://github.com/datastax/spark-cassandra-connector/blob/master/doc/15_python.md):

"SparkCassandraTest.py"
from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext

conf = SparkConf()
conf.setMaster("local[4]")
conf.setAppName("Spark Cassandra")
conf.set("spark.cassandra.connection.host","http://127.0.0.1")

sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)

sqlContext.read\
    .format("org.apache.spark.sql.cassandra")\
    .options(table="kv", keyspace="test")\
    .load().show()

这给了我以下错误:

    py4j.protocol.Py4JJavaError: An error occurred while calling o28.load.
: java.lang.NoSuchMethodError: scala.Predef$.$conforms()Lscala/Predef$$less$colon$less;
    at org.apache.spark.sql.cassandra.DefaultSource$.<init>(DefaultSource.scala:138)
    at org.apache.spark.sql.cassandra.DefaultSource$.<clinit>(DefaultSource.scala)
    at org.apache.spark.sql.cassandra.DefaultSource.createRelation(DefaultSource.scala:56)
    at org.apache.spark.sql.execution.datasources.ResolvedDataSource$.apply(ResolvedDataSource.scala:125)
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:114)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:231)
    at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:379)
    at py4j.Gateway.invoke(Gateway.java:259)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:207)
    at java.lang.Thread.run(Thread.java:745)

我真的不知道我做错了什么,并感谢任何帮助。 另外,使用版本1或版本2有什么区别?这两个版本之间有什么优点或缺点吗?

此外,任何关于如何最好地集成和使用火花与cassandra的进一步参考将受到高度赞赏。

顺便说一句,Cassandra正在我的电脑上运行,端口7000的基本配置。

感谢。

1 个答案:

答案 0 :(得分:8)

Pyspark_Cassandra是一个与spark-cassandra-connector不同的包。它包括SCC的一个版本但不可互换。安装SCC不会安装pyspark_cassandra。如果您想从pyspark使用sc.cassandraTable(),则需要此包。

安装SCC确实可以让你在pyspark中使用Dataframes,这是从pyspark处理C *的最有效方法。这与V2示例相同。失败使得您似乎没有使用--package命令启动V2。

它可能失败的原因是你在这里指定了Scala 2.11版本的库

./bin/spark-submit --packages com.datastax.spark:spark-cassandra-connector_2.11:1.5.0-M2 ../Main/Code/myPysparkFile.py

很可能没有运行Scala 2.10版本的Spark(默认下载是2.10)