Проблема сохранения Jupyter Cassandra — java.lang.Ошибка с сохранением NoClassDefFoundError: com/ twitter/jsr166e/LongAdder

#python #csv #cassandra #pyspark #jupyter

#python #csv #cassandra #pyspark #jupyter

Вопрос:

Я использую Jupyter notebook и хочу сохранить CSV-файл в cassandra db. При получении данных и их отображении проблем нет, но когда я пытаюсь сохранить эти csv-данные в cassandra db, возникает исключение ниже.

 : org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 1.0 failed 1 times, most recent failure: Lost task 0.0 in stage 1.0 (TID 1, localhost, executor driver): java.lang.NoClassDefFoundError: com/twitter/jsr166e/LongAdder
  

Я загрузил пакет maven вручную как 2.4.0, так и 2.4.1, и ни один из них не сработал. Также указаны пакеты в верхней части кода.

 import sys
import uuid
import time
import os

os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.datastax.spark:spark-cassandra-connector_2.11:2.4.0 pyspark-shell'

try:
    from pyspark import SparkContext
    from pyspark import SparkConf
    from pyspark.sql import SparkSession
    from itertools import islice
    from pyspark.sql import SQLContext
    from pyspark.sql.types import *
    from pyspark.sql import Row
    from datetime import datetime

except ImportError as e:
    print("error importing spark modules", e)
    sys.exit(1)

conf = SparkConf().setAppName("Stand Alone Python Script").setMaster("local[*]")
                        .setAll([('spark.executor.memory', '8g'),
                        ('spark.executor.cores', '3'),
                        ('spark.cores.max', '3'),
                        ('spark.cassandra.connection.host', 'cassandra_ip'),
                        ('spark.cassandra.auth.username', 'cassandra_user_name'),
                        ('spark.cassandra.auth.password', 'cassandra_password'),
                        ('spark.driver.memory','8g')])

sc = SparkContext(conf=conf)
sql_context = SQLContext(sc)



consumer_complaints = sql_context.read.format("csv").option("header", "true").option("inferSchema", "false").load("in/Consumer_Complaints.csv")
consumer_complaints.write
    .format("org.apache.spark.sql.cassandra")
    .mode('append')
    .options(table="table_name", keyspace="space_name")
    .save()


sc.stop()
  

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

1. Вы пытались запустить его в pyspark , без Jupyter? Можете ли вы попробовать использовать datastax:spark-cassandra-connector:2.4.1-s_2.11 в --packages опции вместо com.datastax.spark:spark-cassandra-connector_2.11:2.4.0

2. @AlexOtt Да, я использовал оба способа. Также определен —jar, но не работал ни с одним из них

3. странно — datastax:spark-cassandra-connector:2.4.1-s_2.11 должен быть fat jar со всеми зависимостями…

4. @AlexOtt это затенено только для некоторых библиотек DSE, но —packages также должны загружать все зависимости. Итак, я предполагаю, что приведенный выше синтаксис просто неправильно применялся :/

5. Для обоих вариантов все работало просто отлично

Ответ №1:

Привет, я решил свою проблему следующими шагами:

загрузил jsr-файл Twitter jar и переместил его в каталог $ SPARK_HOME/jars.

 cp /home/jovyan/.m2/repository/com/twitter/jsr166e/1.1.0/jsr166e-1.1.0.jar /usr/local/spark/jars/
  

Также из-за того, что пользователь jupyter в docker — jovyan, а не root, я предоставляю разрешение на эту папку

Я использовал приведенное непосредственно ниже утверждение, но вы можете использовать более строгий способ.

 chmod -R 777 /usr/local/spark/jars/
  

Спасибо