0

私はスパークからカサンドラにリード/ライトをしようとし、これらの依存関係を使用しています:Cassandraの読み込みデータセットがNullPointerExceptionで失敗するのはなぜですか?

"com.datastax.spark" % "spark-cassandra-connector-unshaded_2.11" % "2.0.0-M3", 
"com.datastax.cassandra" % "cassandra-driver-core" % "3.0.0" 

そして、これはコードです:

import com.datastax.spark.connector._ 
val sparkConf: SparkConf = new SparkConf().setAppName(appName) 
     .set("spark.cassandra.connection.host", hostname) 
     .set("spark.cassandra.auth.username",user) 
     .set("spark.cassandra.auth.password",password) 

val spark = SparkSession.builder().config(sparkConf).getOrCreate() 
val df = spark 
     .read 
     .format("org.apache.spark.sql.cassandra") 
     .options(Map("table" -> s"$TABLE", "keyspace" -> s"$KEYSPACE")) 
     .load() // This Dataset will use a spark.cassandra.input.size of 128 

は、しかし、提出スパークしようとしている上で、私はこれを取得しています

Exception in thread "main" java.lang.NullPointerException 
    at com.datastax.driver.core.Cluster$Manager.close(Cluster.java:1516) 
    at com.datastax.driver.core.Cluster$Manager.access$200(Cluster.java:1237) 
    at com.datastax.driver.core.Cluster.closeAsync(Cluster.java:540) 
    at com.datastax.driver.core.Cluster.close(Cluster.java:551) 
    at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:162) 
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$3.apply(CassandraConnector.scala:149) 
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$3.apply(CassandraConnector.scala:149) 
    at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:31) 
    at com.datastax.spark.connector.cql.RefCountedCache.acquire(RefCountedCache.scala:56) 
    at com.datastax.spark.connector.cql.CassandraConnector.openSession(CassandraConnector.scala:82) 
    at com.datastax.spark.connector.cql.CassandraConnector.withSessionDo(CassandraConnector.scala:110) 
    at com.datastax.spark.connector.rdd.partitioner.dht.TokenFactory$.forSystemLocalPartitioner(TokenFactory.scala:98) 
    at org.apache.spark.sql.cassandra.CassandraSourceRelation$.apply(CassandraSourceRelation.scala:255) 
    at org.apache.spark.sql.cassandra.DefaultSource.createRelation(DefaultSource.scala:55) 
    at org.apache.spark.sql.execution.datasources.DataSource.resolveRelation(DataSource.scala:345) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:149) 
    at org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:122) 

答えて

2

上記DF ...負荷()ライン上でM3は、マイルストーンリリースであり、あなたは本当に、現在最新である本当のリリース2.0.2を使用する必要があります。

https://github.com/datastax/spark-cassandra-connector#most-recent-release-scala-docs

あなたははカサンドラコネクタと同じプロジェクト内のJavaドライバーを含めてはなりません。プロジェクト内で明示的にシェーディングを変更していない限り、それは専門家向けです。詳細については、FAQを参照してください。

私は国会

投稿 here

"org.apache.spark" %% "spark-core" % sparkVersion % "provided", 
    "org.apache.spark" %% "spark-sql" % sparkVersion % "provided", 
    "org.apache.spark" %% "spark-hive" % sparkVersion % "provided", 
    "com.datastax.spark" %% "spark-cassandra-connector" % connectorVersion % "provided" 

および使用はパッケージのスパーク起動またはアセンブリ

//としてのみ影アーティファクトを使用しての例を以下

https://github.com/datastax/SparkBuildExamples#sbt

をお勧めします//パッケージ

https://spark-packages.org/package/datastax/spark-cassandra-connector

+0

説明をありがとう!リンクが助けになりました。私はドライバを削除しました。私は今これを行っています(スパークコア以外): // sbt '' com.datastax.spark '%% "spark-cassandra-connector"% "2.0.2"% " (Map( "table" - > s "$ TABLE"、 "keyspace" - > s ")")を使用すると、 $ KEYSPACE "))。load()' 私のjarはすべての依存関係を持つfat jarです。私はspark-submitをやっています。そして、私は同じNPEをもう一度見ます。 –

+0

SparkBuildExamplesの例では、 "spark-cassandra-connectorには、spark-submitコマンドに '--packages'フラグを指定する必要があります。スパーク提出の場合でもそれを行う必要がありますか?私はそれがスパークシェルのみで行うために必要と考えました。エラーの原因になりますか?はいの場合、私の火花送信はどのように見えるのですか? –

+0

私はSparkBuildExamplesリンクからこの例を取っ​​たので、そのままWriteReadを試しています。元のNPEはなくなりました。これを今すぐ取得しています: 'スレッド内の例外" main/datastax/spark/connector/cql/CassandraConnector; 'どんな提案?上記のようにspark-core、spark-sql、およびCassandra-connector jarを使用しています(ハイブはありません)。 –

関連する問題