【问题标题】:Jupyter Cassandra Save Problem - java.lang.NoClassDefFoundError: com/twitter/jsr166e/LongAdderJupyter Cassandra 保存问题 - java.lang.NoClassDefFoundError: com/twitter/jsr166e/LongAdder
【发布时间】:2019-08-12 02:18:12
【问题描述】:

我正在使用 Jupyter 笔记本并希望将 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

我手动下载了 2.4.0 和 2.4.1 的 maven 包,但它们都没有工作。还在代码顶部声明了包。

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()

【问题讨论】:

  • 您是否尝试过在pyspark 中运行它,而不使用 Jupyter?您可以尝试在--packages 选项中使用datastax:spark-cassandra-connector:2.4.1-s_2.11 而不是com.datastax.spark:spark-cassandra-connector_2.11:2.4.0
  • @AlexOtt 是的,我两种方式都使用过。还定义了 --jar 但其中任何一个都不起作用
  • 奇怪 - datastax:spark-cassandra-connector:2.4.1-s_2.11 应该是一个胖罐子,包含所有依赖项......
  • @AlexOtt 仅对某些 DSE 库有阴影,但 --packages 也应下载所有依赖项。所以我猜上面的语法没有被正确应用:/
  • 两种变体都可以正常工作

标签: python csv cassandra pyspark jupyter


【解决方案1】:

您好,我通过以下步骤解决了我的问题:

下载 twitter jsr jar 并将其移至 $SPARK_HOME/jars 目录。

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

还因为 docker 的 jupyter 用户是 jovyan 而不是 root 我授予此文件夹的权限

我直接使用下面的语句,但你可以使用更严格的方式。

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

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 2018-10-10
    • 2016-03-05
    • 2019-01-30
    • 1970-01-01
    • 2012-06-01
    • 2013-12-16
    • 2012-12-02
    相关资源
    最近更新 更多