簡體   English   中英

帶有scala2.10.6的spark1.6.2沒有可用的TypeTag

[英]spark1.6.2 with scala2.10.6 No TypeTag available

我試圖從這里開始 KMeans案。

這是我的代碼:

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和scala 2.10.6。運行它時,編譯失敗並顯示上面的錯誤。 但是,當將scala版本更改為2.11.0時 運行正常

2.我在Hue中運行此代碼,該代碼由Livy將作業提交給我的集群,並且我的集群使用Spark1.6.2和scala2.10.6構建

有誰能夠幫助我 ? 謝謝

色調

我不太確定這個問題的原因,但是我認為這是因為在舊版本的Scala中,Scala反射yet not inferred函數參數的TypeTag

在這種情況下,

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")

Scala首次看到參數Seq((1, Vectors.dense(0.0, 0.0, 0.0)),.....) ,因此系統仍無法推斷出其類型。 因此,scala反射無法計算出關聯的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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM