1

Я следую примеру документации Example: Estimator, Transformer, and ParamСпарк пример MLlib, NoSuchMethodError: org.apache.spark.sql.SQLContext.createDataFrame()

И я получил ошибки Сообщ

15/09/23 11:46:51 INFO BlockManagerMaster: Registered BlockManager Exception in thread "main" java.lang.NoSuchMethodError: scala.reflect.api.JavaUniverse.runtimeMirror(Ljava/lang/ClassLoader;)Lscala/reflect/api/JavaUniverse$JavaMirror; at SimpleApp$.main(hw.scala:75)

И линия 75 является код "sqlContext.createDataFrame()":

import java.util.Random 

import org.apache.log4j.Logger 
import org.apache.log4j.Level 

import scala.io.Source 

import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.rdd._ 


import org.apache.spark.ml.classification.LogisticRegression 
import org.apache.spark.ml.param.ParamMap 
import org.apache.spark.mllib.linalg.{Vector, Vectors} 
import org.apache.spark.mllib.recommendation.{ALS, Rating, MatrixFactorizationModel} 
import org.apache.spark.sql.Row 
import org.apache.spark.sql.SQLContext 
import org.apache.spark.sql.DataFrame 
import org.apache.spark.sql.functions._ 

object SimpleApp { 
    def main(args: Array[String]) { 
     val conf = new SparkConf().setAppName("Simple Application").setMaster("local[4]"); 
     val sc = new SparkContext(conf) 
     val sqlContext = new SQLContext(sc) 
     val training = sqlContext.createDataFrame(Seq(
     (1.0, Vectors.dense(0.0, 1.1, 0.1)), 
     (0.0, Vectors.dense(2.0, 1.0, -1.0)), 
     (0.0, Vectors.dense(2.0, 1.3, 1.0)), 
     (1.0, Vectors.dense(0.0, 1.2, -0.5)) 
     )).toDF("label", "features") 
    } 
} 

И мой SBT, как показано ниже:

lazy val root = (project in file(".")). 
    settings(
    name := "hello", 
    version := "1.0", 
    scalaVersion := "2.11.4" 
) 

libraryDependencies ++= { 
    Seq(
     "org.apache.spark" %% "spark-core" % "1.4.1" % "provided", 
     "org.apache.spark" %% "spark-sql" % "1.4.1" % "provided", 
     "org.apache.spark" % "spark-hive_2.11" % "1.4.1", 
     "org.apache.spark" % "spark-mllib_2.11" % "1.4.1" % "provided", 
     "org.apache.spark" %% "spark-streaming" % "1.4.1" % "provided", 
     "org.apache.spark" %% "spark-streaming-kinesis-asl" % "1.4.1" % "provided" 
    ) 
} 

Я попытался найти и найти this post, который очень похож на мою проблему, и я попытался изменить настройку sbt для искровых версий (spark-mllib_2.11 до 2.10 и spark-1.4.1 до 1.5.0), но это привело к еще большему конфликту зависимости.

Моя интуиция - это проблема с некоторыми версиями, но я не могу понять это, может ли кто-нибудь помочь? большое спасибо.

+1

Вы должны добавить' spark-sql' в зависимости. – zero323

+0

@ zero323 спасибо, я добавлю его и попробую – keypoint

+0

@ zero323 это не сработало, все равно такая же ошибка.Я думаю, возможно, это потому, что здесь «val sqlContext = new SQLContext (sc) val training = sqlContext.createDataFrame()», где я новичок в неправильном классе без такого метода? – keypoint

ответ

2

Теперь он работает для меня и просто для записи, ссылаясь на @MartinSenne.

, что я сделал это, как показано ниже:

  1. очистить все компилировать файлы в папке "проект"
  2. версия SCALA 2.10.4 (ранее с помощью 2.11.4)
  3. изменения искровой-SQL «org.apache.spark« %% »spark-sql«% »1.4.1«% »предоставлено»
  4. изменить MLlib быть: "org.apache.spark" %% "spark- mllib "%" 1.4.1 "%" при условии, что "

@note:

  1. Я уже начал искру кластер, и я использую "ш искровым представить /path_to_folder/hello/target/scala-2.10/hello_2.10-1.0. jar ", чтобы отправить банку Spark master. Если использование sbt для запуска по команде «sbt run» не удастся.
  2. при переходе от Скале-2,11 к 2,10-Скала, помните, что баночка файл путь и имя также будет меняться от «-2,11 лестницу/hello_2.11-1.0.jar» в "-2,10 Скала/hello_2.10-1.0.jar ". когда я повторно упаковал все, я забыл изменить команду задания задания для имени jar, поэтому я упаковываю в «hello_2.10-1.0.jar», но отправляю «hello_2.10-1.0.jar», что вызвало дополнительную проблему. ..
  3. Я попытался как "VAL sqlContext = новый org.apache.spark.sql.SQLContext (SC)" и «вал sqlContext = новый org.apache.spark.sql.hive.HiveContext (СБН) », оба работают с методом createDataFrame()
Смежные вопросы