Не удается получить CassandraTableScanRDD с помощью akka - PullRequest
2 голосов
/ 01 мая 2019

Я пытаюсь сделать API Rest с помощью Akka. Одна из точек входа вернет данные из моей базы данных Cassandra. Таким образом, я могу получить свой CassandraTableScanRDD так:

val spark = SparkSession
    .builder()
    .appName("Spark Cassandra")
    .config("spark.cores.max", "5")
    .config("spark.sql.warehouse.dir", "/tmp")
    .config("spark.cassandra.connection.host", "localhost")
    .config("spark.cassandra.connection.port", "9042")
    .master("local[*]")
    .getOrCreate()

  val connector = CassandraConnector.apply(spark.sparkContext.getConf)
  val sc = spark.sparkContext
  val temp = sc.cassandraTable("scala_firemen", "firemen")

  temp.foreach(println)

И с помощью этого кода я могу получить все необходимые данные. Но как только я добавлю свой код Akka, я больше не смогу распечатать / получить доступ к данным. Даже если я откатаюсь и удаляю код Akka, я все равно кодирую ту же ошибку:

[ошибка] (run-main-0) java.lang.ExceptionInInitializerError

[ошибка] java.lang.ExceptionInInitializerError

[ошибка] в org.apache.spark.rdd.RDD.withScope (RDD.scala: 362)

[ошибка] в org.apache.spark.rdd.RDD.first (RDD.scala: 1367)

[ошибка] в главном $ .delayedEndpoint $ main $ 1 (Server.scala: 34)

[ошибка] в главном $ delayedInit $ body.apply (Server.scala: 15)

...

ОШИБКА ContextCleaner: Ошибка в очистке потока

...

ERROR Utils: необработанная ошибка в потоке SparkListenerBus, остановка SparkContext

...

ERROR Utils: выбросить необработанную фатальную ошибку в потоке SparkListenerBus

...

Когда я заново создаю проект, код снова работает, поэтому я подозреваю, что мне нужно что-то почистить после удаления кода Akka, чтобы он снова заработал.

Ответы [ 2 ]

2 голосов
/ 01 мая 2019

СДР предназначены для использования со Spark, и вообще не имеет смысла использовать его в StreamingContext ...

Для вашего приложения Akka вам необходимо драйвер Java напрямую , и даже в этом случае вам не нужно выполнять полное сканирование данных - быстрый доступ к данным предоставляется только при наличии наименьшего ключа раздела ... Если вам все еще нужно выполнить полное сканирование, то этолучше использовать что-то вроде this - Spark использует аналогичный подход для сканирования данных, но вам не нужно связывать все его библиотеки.

Я предлагаю вам ознакомиться с работой Cassandra- например, через курсы в DataStax Academy - они объяснят, как вы можете получить доступ к данным и т. д.

1 голос
/ 02 мая 2019

Хорошо, я понял, что не могу иметь зависимость "com.typesafe.play" %% "play-json" со всеми зависимостями искры, такими как:

"org.apache.spark" %% "spark-sql" % "2.1.1",
"org.apache.spark" %% "spark-streaming" % "2.1.1",
"com.datastax.spark" %% "spark-cassandra-connector" % "2.0.10"
...