ScalaSpark: невозможно создать фрейм данных с зависимостью от клиента scala - PullRequest
0 голосов
/ 10 января 2020

Мне нужно поддержать версию 6 couchbase с spark 2.3 или 2.4, а версия scala - 2.11.12. Я столкнулся с проблемой при создании фрейма данных.

Фрагмент кода SBT

scalaVersion := "2.11.12"

resolvers += "Couchbase Snapshots" at "http://files.couchbase.com/maven2"

val sparkVersion = "2.3.2"


libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion,
  "org.apache.spark" %% "spark-streaming" % sparkVersion,
  "org.apache.spark" %% "spark-sql" % sparkVersion,
  "com.couchbase.client" %% "spark-connector" % "2.3.0",
  "com.couchbase.client" %% "scala-client" % "1.0.0-alpha.3")

Код

val spark = SparkSession
      .builder()
      .appName("Example")
      .master("local[*]") 
      .config("spark.couchbase.nodes", "10.12.12.88") // connect to Couchbase Server on localhost
      .config("spark.couchbase.username", "abcd") // with given credentials
      .config("spark.couchbase.password", "abcd")
      .config("spark.couchbase.bucket.beer-sample", "") // open the travel-sample bucket
      .getOrCreate()

val sc = spark.sparkContext
import com.couchbase.spark.sql._
val sql = spark.sqlContext
val dataframe = sql.read.couchbase()   
val result = dataframe.collect()

Исключение

Caused by: java.lang.ClassNotFoundException: com.couchbase.client.core.message.CouchbaseRequest
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)

Попытка: Согласно предложению добавлена ​​зависимость

"com.couchbase.client" % "core-io" % "1.7.6",

Без зависимости scala -клиента. Я могу получить кадр данных, но с scala -клиентом невозможно исправить. пожалуйста, предложите решение этой проблемы

1 Ответ

0 голосов
/ 10 января 2020

Я внес изменения в ваш файл build.sbt и добавил настройки для плагина sbt-assembly.

scalaVersion := "2.11.12"

resolvers += "Couchbase Snapshots" at "http://files.couchbase.com/maven2"

val sparkVersion = "2.3.2"


libraryDependencies ++= Seq(
  "org.apache.spark" %% "spark-core" % sparkVersion % Provided,
  "org.apache.spark" %% "spark-streaming" % sparkVersion % Provided,
  "org.apache.spark" %% "spark-sql" % sparkVersion % Provided,
  "com.couchbase.client" %% "spark-connector" % "2.3.0")

assemblyJarName in assembly := s"${name.value}-${version.value}.jar"

assemblyMergeStrategy in assembly := {
  case m if m.toLowerCase.endsWith("manifest.mf")       => MergeStrategy.discard
  case m if m.toLowerCase.matches("meta-inf.*\\.sf$")   => MergeStrategy.discard
  case "reference.conf"                                 => MergeStrategy.concat
  case x: String if x.contains("UnusedStubClass.class") => MergeStrategy.first
  case _                                                => MergeStrategy.first
}

Вам необходимо создать файл с именем plugins.sbt в каталоге с именем project и добавьте в него следующую строку:

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.10")

По завершении выполните команду sbt clean compile assembly в каталоге проектов root. он должен построить вашу банку.

...