Создайте sbt для Spark с помощью janusgraph и gremlin scala

Я пытался настроить сборку IntelliJ для Spark с janusgraph, используя gremlin scala, но у меня возникают ошибки.

Мой файл build.sbt:

version := "1.0"

scalaVersion := "2.11.11"

libraryDependencies += "com.michaelpollmeier" % "gremlin-scala" % "2.3.0"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.1"
// https://mvnrepository.com/artifact/org.apache.spark/spark-sql
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.2.1"
// https://mvnrepository.com/artifact/org.apache.spark/spark-mllib
libraryDependencies += "org.apache.spark" %% "spark-mllib" % "2.2.1"
// https://mvnrepository.com/artifact/org.apache.spark/spark-hive
libraryDependencies += "org.apache.spark" %% "spark-hive" % "2.2.1"
// https://mvnrepository.com/artifact/org.janusgraph/janusgraph-core
libraryDependencies += "org.janusgraph" % "janusgraph-core" % "0.2.0"

libraryDependencies ++= Seq(
  "ch.qos.logback" % "logback-classic" % "1.2.3" % Test,
  "org.scalatest" %% "scalatest" % "3.0.3" % Test
)

resolvers ++= Seq(
  Resolver.mavenLocal,
  "Sonatype OSS" at "https://oss.sonatype.org/content/repositories/public"
) 

Но я получаю ошибки, когда пытаюсь скомпилировать код, использующий библиотеки gremlin scala или библиотеки io.Source. Может ли кто-нибудь поделиться своим файлом сборки или сказать, что мне нужно изменить, чтобы это исправить. Заранее спасибо.

Итак, я пытался скомпилировать этот код:

import gremlin.scala._
import org.apache.commons.configuration.BaseConfiguration
import org.janusgraph.core.JanusGraphFactory


class Test1() {
  val conf = new BaseConfiguration()
  conf.setProperty("storage.backend", "inmemory")
  val gr = JanusGraphFactory.open(conf)
  val graph = gr.asScala()
  graph.close

}

object Test{
  def main(args: Array[String]) {
    val t = new Test1()
    println("in Main")
  }
}

Я получаю следующие ошибки:

Ошибка: (1, 8) не найден: объект gremlin import gremlin.scala._

Ошибка: (10, 18) значение asScala не является членом org.janusgraph.core.JanusGraph val graph = gr.asScala ()


person J.Doe    schedule 22.01.2018    source источник
comment
Не могли бы вы хотя бы предоставить текст возникающих ошибок?   -  person SergGr    schedule 22.01.2018
comment
Я добавил текст ошибки.   -  person J.Doe    schedule 23.01.2018


Ответы (1)


Если вы перейдете на страницу Gremlin-Scala GitHub, то увидите, что текущая версия - " 3.3.1.1 "и что

Обычно вам просто нужно добавить зависимость от "com.michaelpollmeier" %% "gremlin-scala" % "SOME_VERSION" и одну для графа db по вашему выбору в свой build.sbt (этот файл readme предполагает tinkergraph). Последняя версия отображается в верхней части этого файла readme на значке maven.

Неудивительно, что APi изменился, когда изменилась основная версия библиотеки. Если я изменю вашу первую зависимость как

//libraryDependencies += "com.michaelpollmeier" % "gremlin-scala" % "2.3.0" //old!
libraryDependencies += "com.michaelpollmeier" %% "gremlin-scala" % "3.3.1.1"

тогда ваш пример кода компилируется для меня.

person SergGr    schedule 23.01.2018
comment
Спасибо, это помогло. Но теперь, когда я пишу код для подключения к хранилищу метаданных улья и извлекаю таблицу в Spark SQL, я получаю ошибку java.lang.IllegalAccessError: попытался получить доступ к методу com.google.common.base.Stopwatch. ‹Init› () V из ошибки класса org.apache.hadoop.mapred.FileInputFormat. Что могло быть не так? Добавление зависимости от гуавы не помогло. - person J.Doe; 25.01.2018
comment
@ J.Doe, готов поспорить, что вы используете старые двоичные файлы Hadoop с новыми двоичными файлами Guava. Как видите, Hadoop больше не использует секундомер Guava в течение некоторого времени. Похоже, вы следуете довольно старому руководству, которое не обновлялось годами. Но как только вы вводите новую зависимость, это может привести к обновлению множества других транзитивных зависимостей. Я не уверен, что ты сможешь легко откатить Гуаву обратно. Думаю, будет проще обновить Hadoop. P.S. Если ответ помогает, его принято отмечать как Принято. - person SergGr; 25.01.2018
comment
Я обновил зависимости до последней версии всех используемых мной библиотек. Теперь я получаю новую ошибку, которая начинается с: Exception in thread main java.lang.RuntimeException: Error in configuring object at org.apache.hadoop.util.ReflectionUtils.setJobConf (ReflectionUtils.java:109) at org.apache.hadoop. util.ReflectionUtils.setConf (ReflectionUtils.java:75) в org.apache.hadoop.util.ReflectionUtils.newInstance (ReflectionUtils.java:133) в org.apache.spark.rdd.HadoopRDD.getInputFormat (HadoopRD) .scala: в .... - person J.Doe; 27.01.2018
comment
@ J.Doe, с этим я не в своей тарелке. Это совершенно новая ошибка, и я не уверен в причинах. Вы должны сначала изучить это (даже у SO есть несколько похожих вопросов), и если это не поможет, создайте новый вопрос с более подробной информацией о том, как вы это воспроизвести. - person SergGr; 27.01.2018