Кассандра с PySpark и Python >=3,6

#python-3.x #apache-spark #pyspark #cassandra #spark-cassandra-connector

Вопрос:

Я новичок в Cassandra и Pyspark, изначально я установил cassandra версии 3.11.1, openjdk 1.8, pyspark 3.x и scala 1.12. Я получал много ошибок, как показано ниже, после запуска моего сервера python.

 raise Py4JJavaError(
py4j.protocol.Py4JJavaError: An error occurred while calling o33.load.
: java.lang.NoClassDefFoundError: scala/Product$class
        at com.datastax.spark.connector.util.ConfigParameter.<init>(ConfigParameter.scala:7)
        at com.datastax.spark.connector.rdd.ReadConf$.<init>(ReadConf.scala:33)
        at com.datastax.spark.connector.rdd.ReadConf$.<clinit>(ReadConf.scala)
        at org.apache.spark.sql.cassandra.DefaultSource$.<init>(DefaultSource.scala:134)
        at org.apache.spark.sql.cassandra.DefaultSource$.<clinit>(DefaultSource.scala)
        at org.apache.spark.sql.cassandra.DefaultSource.createRelation(DefaultSource.scala:55)
        at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:355)
        at org.apache.spark.sql.DataFrameReader.loadV1Source(DataFrameReader.scala:325)
        at org.apache.spark.sql.DataFrameReader.$anonfun$load$3(DataFrameReader.scala:307)
        at scala.Option.getOrElse(Option.scala:189)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:307)
        at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:225)
        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:498)
        at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)
        at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357)
        at py4j.Gateway.invoke(Gateway.java:282)
        at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
        at py4j.commands.CallCommand.execute(CallCommand.java:79)
        at py4j.GatewayConnection.run(GatewayConnection.java:238)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: scala.Product$class
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
        ... 23 more
 

Я не знал, в чем именно заключается эта ошибка, но после некоторых исследований я понял, что у соединения pyspark Cassandra возникли некоторые проблемы. Затем я также проверил версии. Во время моего исследования я увидел, что версии Cassandra, отличные от 4.x, несовместимы с Python3.9. Я удалил Cassandra и попытался установить дистрибутив cassandra4, но это вызывает у меня еще один набор ошибок после выполнения команды:

wget http://mirror.cogentco.com/pub/apache/cassandra/4.0-beta2/apache-cassandra-4.0-beta2-bin.tar.gz

     Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 cassandra : Depends: python3 (>= 3.6) but 3.5.1-3 is to be installed
             Recommends: ntp but it is not going to be installed or
                         time-daemon
E: Unable to correct problems, you have held broken packages.
 

Может ли кто-нибудь помочь мне разобраться в этой проблеме? Как я могу установить Cassandra и Pyspark вместе с Python3.9. Есть ли здесь какая-либо несовместимость версий?

обновление вопроса на основе ответа

Я обновил свои версии на другой машине:

В настоящее время я использую следующие версии: Pyspark 3.0.1 Cassandra:4.0 cqlsh:5.0.1 python:3.6 Scala:2.12

Я попытался использовать разъем 3.0.0, а также 3.1.0, оба дают мне ошибки:

 UNRESOLVED DEPENDENCY: com.datastax.spark#spark-cassandra-connector_2.12;3.0.0: not found


:: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
Exception in thread "main" java.lang.RuntimeException: [unresolved dependency: com.datastax.spark#spark-cassandra-connector_2.12;3.0.0: not found]
        at org.apache.spark.deploy.SparkSubmitUtils$.resolveMavenCoordinates(SparkSubmit.scala:1389)
        at org.apache.spark.deploy.DependencyUtils$.resolveMavenDependencies(DependencyUtils.scala:54)
        at org.apache.spark.deploy.SparkSubmit.prepareSubmitEnvironment(SparkSubmit.scala:308)
        at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$runMain(SparkSubmit.scala:871)
        at org.apache.spark.deploy.SparkSubmit.doRunMain$1(SparkSubmit.scala:180)
        at org.apache.spark.deploy.SparkSubmit.submit(SparkSubmit.scala:203)
        at org.apache.spark.deploy.SparkSubmit.doSubmit(SparkSubmit.scala:90)
        at org.apache.spark.deploy.SparkSubmit$anon$2.doSubmit(SparkSubmit.scala:1007)
        at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:1016)
        at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)


.......
        raise Exception("Java gateway process exited before sending its port number")
    Exception: Java gateway process exited before sending its port number
 

Используемая строка подключения: —пакеты com.datastax.spark:spark-cassandra-connector_2.12:3.0.0 —conf spark.cassandra.connection.host=127.0.0.1 pyspark-оболочка, поскольку версия pyspark теперь 3.0.1.

Комментарии:

1. Можете ли вы поделиться тем, как вы запустили свою среду Spark и сеанс Spark?

2. ‘—пакеты com.datastax.spark:spark-cassandra-connector_2.11:2.3.0 —conf spark.cassandra.connection.host=127.0.0.1 pyspark-оболочка’ используется в коде для подключения spark к кассандре

3. И вы видите, как Спарк получает этот пакет в журналах?

4. Нет! это показывает ошибку

Ответ №1:

Вы используете неправильную версию Cassandra connector — если вы используете pyspark 3.x, вам необходимо получить соответствующую версию — 3.0 или 3.1. Ваша версия предназначена для старых версий Spark:

 pyspark --packages com.datastax.spark:spark-cassandra-connector_2.12:3.1.0
 

P.S. Cassandra 4.0 также уже выпущена — нет смысла использовать beta2

Комментарии:

1. Я изменил его на 3.1.0, но это дает мне ошибку с НЕРАЗРЕШЕННЫМИ ЗАВИСИМОСТЯМИ com.datastax.spark#spark-cassandra-connector_2.12;3.1.0: не найден

2. Это моя строка подключения: —пакеты com.datastax.spark:spark-cassandra-connector_2.12:3.1.0 —conf spark.cassandra.connection.host=127.0.0.1 pyspark-оболочка

3. работает просто отлично для меня — проверьте, есть ли у вас брандмауэр, отключающий доступ к maven central, или что-то в этом роде. Если вы используете репозиторий maven компании, используйте --repositories опцию, чтобы указать их