2016-09-19 4 views
1

here에서 KMeans 케이스를 실행하려고합니다. scala2.10.6이있는 spark1.6.2 No TypeTag를 사용할 수 없음

내 코드입니다 :

def main(args: Array[String]): Unit = { 
val conf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[10]")//.set("spark.sql.warehouse.dir", "file:///") 
val sc = new SparkContext(conf) 
val sqlContext = new SQLContext(sc) 
// Crates a DataFrame 
val dataset: DataFrame = sqlContext.createDataFrame(Seq(
    (1, Vectors.dense(0.0, 0.0, 0.0)), 
    (2, Vectors.dense(0.1, 0.1, 0.1)), 
    (3, Vectors.dense(0.2, 0.2, 0.2)), 
    (4, Vectors.dense(9.0, 9.0, 9.0)), 
    (5, Vectors.dense(9.1, 9.1, 9.1)), 
    (6, Vectors.dense(9.2, 9.2, 9.2)) 
)).toDF("id", "features") 

// Trains a k-means model 
val kmeans = new KMeans() 
    .setK(2) 
    .setFeaturesCol("features") 
    .setPredictionCol("prediction") 
val model = kmeans.fit(dataset) 

// Shows the result 
println("Final Centers: ") 
model.clusterCenters.foreach(println)} 

오류 추적 :

Information:2016/9/19 0019 下午 3:36 - Compilation completed with 1 error and 0 warnings in 2s 454ms 
D:\IdeaProjects\de\src\main\scala\com.te\KMeansExample.scala 
    Error:Error:line (18)No TypeTag available for (Int, org.apache.spark.mllib.linalg.Vector) 
    val dataset: DataFrame = sqlContext.createDataFrame(Seq(

몇 가지 세부 사항 :

1. 나는 spark1.6.2와 스칼라와 함께이 프로그램을 실행할 때 2.10.6.it 컴파일이 실패하고 위의 오류가 표시됩니다. 그러나 인 경우 스칼라 버전을 으로 변경하십시오. 실행했습니다..

2

나는 Livy에 의해 내 클러스터에이 작업을 제출 Hue에서이 코드를 실행, 내 클러스터

아무도 도와 줄 수 Spark1.6.2 및 scala2.10.6

빌드? 감사합니다

hue

답변

2

나는이 문제의 원인에 대해 매우 확실하지 오전하지만 스칼라의 이전 버전에서 스칼라 반사는 TypeTagyet not inferred의 함수 매개 변수를 작동 할 수 없습니다 때문에 나는 그것이라고 생각합니다. 이 경우

,

val dataset: DataFrame = sqlContext.createDataFrame(Seq(
    (1, Vectors.dense(0.0, 0.0, 0.0)), 
    (2, Vectors.dense(0.1, 0.1, 0.1)), 
    (3, Vectors.dense(0.2, 0.2, 0.2)), 
    (4, Vectors.dense(9.0, 9.0, 9.0)), 
    (5, Vectors.dense(9.1, 9.1, 9.1)), 
    (6, Vectors.dense(9.2, 9.2, 9.2)) 
)).toDF("id", "features") 

파라미터 Seq((1, Vectors.dense(0.0, 0.0, 0.0)),.....) 스칼라가 처음 볼되고 따라서 그 종류가 여전히 시스템에 의해 추론되지 않는다. 따라서 스칼라 반사는 연관된 TypeTag을 해결할 수 없습니다.

그래서 ... 내 추측은 만약 당신이 그것을 밖으로 움직인다면 ... scala가 타입을 유추하도록 허용하면 ... 작동 할 것입니다.

val vectorSeq = Seq(
    (1, Vectors.dense(0.0, 0.0, 0.0)), 
    (2, Vectors.dense(0.1, 0.1, 0.1)), 
    (3, Vectors.dense(0.2, 0.2, 0.2)), 
    (4, Vectors.dense(9.0, 9.0, 9.0)), 
    (5, Vectors.dense(9.1, 9.1, 9.1)), 
    (6, Vectors.dense(9.2, 9.2, 9.2)) 
) 

val dataset: DataFrame = sqlContext.createDataFrame(vectorSeq).toDF("id", "features") 
+0

이 문제가 발생했습니다. 스레드 "main"의 예외 java.lang.NoSuchMethodError : scala.Predef $. $ conforms() Lscala/Predef $$ less $ 콜론 $ less; \t org.apache.spark.util.Utils $ .getSystemProperties (Utils.scala : 1582) –

+0

올바른 버전의 Spark' "org.apache.spark"% "spark-core_2.10"을 사용하고 있습니까? 귀하의 스칼라 버전'2.10.6'에 따라 "1.6.2"%? –

+0

예 "org.apache.spark"% "spark-core_2.10"% "1.6.2" –