Connecting/Integrating 带 Spark 的 Cassandra (pyspark)
Connecting/Integrating Cassandra with Spark (pyspark)
我拼命尝试将 Cassandra 连接到 pyspark,但我无法让它工作。我对 spark 和 cassandra 很陌生,所以我可能会错过一些相当简单的东西。
我对网上各种不同的解释感到有点困惑,但据我了解,最简单的方法是使用 "Spark packages"? (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
我的理解是否正确,如果我如上所述使用 spark 包,则不需要下载任何包?
在 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 有什么区别?两个版本有什么优缺点吗?
此外,我们将不胜感激任何关于如何最好地将 spark 与 cassandra 集成和使用的参考资料。
顺便说一句,Cassandra 运行 在我的电脑上,基本配置在端口 7000 上。
谢谢。
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
而且很可能不是 运行 Spark 的 Scala 2.10 版本(默认下载是 2.10)
我拼命尝试将 Cassandra 连接到 pyspark,但我无法让它工作。我对 spark 和 cassandra 很陌生,所以我可能会错过一些相当简单的东西。
我对网上各种不同的解释感到有点困惑,但据我了解,最简单的方法是使用 "Spark packages"? (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
我的理解是否正确,如果我如上所述使用 spark 包,则不需要下载任何包?
在 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 有什么区别?两个版本有什么优缺点吗?
此外,我们将不胜感激任何关于如何最好地将 spark 与 cassandra 集成和使用的参考资料。
顺便说一句,Cassandra 运行 在我的电脑上,基本配置在端口 7000 上。
谢谢。
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
而且很可能不是 运行 Spark 的 Scala 2.10 版本(默认下载是 2.10)