Запросите Cassandra из Spark, используя CassandraSQLContext - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь запросить Cassandra из Spark, используя CassandraSQLContext, но я получаю странную отсутствующую ошибку зависимости. У меня есть приложение Spark, подобное следующему:

val spark: SparkSession = SparkSession.builder().appName(appName).getOrCreate()
val cassandraSQLContext = new org.apache.spark.sql.cassandra.CassandraSQLContext(spark.sparkContext)

val path = args(0)
cassandraSQLContext.setKeyspace(args(1))

val dataFrame: DataFrame = cassandraSQLContext.sql(args(2))
dataFrame.write.mode(SaveMode.Overwrite).option("header", "true").csv(path)

И я получаю пропущенную ошибку класса Spark Scala:

User class threw exception: java.lang.NoClassDefFoundError: org/apache/spark/sql/catalyst/analysis/Catalog
    at com.test.batch.utils.CSVFromCassandraSQLQuery$.<init>(CSVFromCassandraSQLQuery.scala:19)
    at com.test.batch.utils.CSVFromCassandraSQLQuery$.<clinit>(CSVFromCassandraSQLQuery.scala)
    at com.test.batch.utils.CSVFromCassandraSQLQuery.main(CSVFromCassandraSQLQuery.scala)
    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 org.apache.spark.deploy.yarn.ApplicationMaster$$anon$4.run(ApplicationMaster.scala:721)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.catalyst.analysis.Catalog
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 8 more

Я также попытался явно добавить путь * jar spark-catalyst в команду spark-submit, но у меня все еще возникает та же проблема (независимо от того, запускаю ли я его локально или в кластере пряжи) ...

Вот мои настройки проекта build.sbt:

scalaVersion := "2.11.11"
val sparkVersion = "2.3.1"

libraryDependencies ++= Seq(
  "log4j" % "log4j" % "1.2.17",
  "org.apache.spark" %% "spark-core" % sparkVersion % "provided",
  "org.apache.spark" %% "spark-sql" % sparkVersion  % "provided",
  "org.apache.spark" %% "spark-hive" % sparkVersion % "provided",
  "org.apache.spark" %% "spark-catalyst" % sparkVersion % "provided",
  "org.apache.spark" %% "spark-streaming" % sparkVersion % "provided",
  "com.datastax.spark" %% "spark-cassandra-connector" % "2.3.1",
  "org.scala-lang.modules" %% "scala-java8-compat" % "0.9.0",
  "com.twitter" % "jsr166e" % "1.1.0"
)

Есть идеи о том, что мне не хватает?

1 Ответ

1 голос
/ 21 марта 2019

Эта проблема возникает из-за того, что org.apache.spark.sql.catalyst.analysis. Каталог Класс больше не является частью spark-катализатор_2.11: 2.xx .Пожалуйста, обратитесь к исходному коду spark-катализатор_2.11: 2.0.0

https://jar -download.com / артефакты / org.apache.spark / spark-катализатор_2.11/2.0.0/source-code

org.apache.spark.sql.catalyst.analysis.Catalog класс доступен до spark-катализатор_2.11: 1.6.3 версия.

https://jar -download.com / artifacts / org.apache.spark / spark-катализатор_2.11 / 1.6.3 / исходный код

Я бы попросил вас не использовать CassandraSQLContext , поскольку он устарел.Пожалуйста, проверьте https://datastax -oss.atlassian.net / browse / SPARKC-399 .

Пожалуйста, проверьте SO сообщение, чтобы использовать Cassandra Context в spark 2.0 .

как использовать Cassandra Context в spark 2.0

...