spark1.6.2 with scala2.10.6没有TypeTag可用

时间:2016-09-19 08:06:12

标签: scala apache-spark hue

我试图从here运行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.it运行时,编译失败并显示上面的错误。但是将scala版本更改为 2.11.0 运行正常

2. 我在Hue中运行此代码,通过Livy将此作业提交到我的群集,并使用Spark1.6.2和scala2.10.6将我的群集构建

任何人都可以帮助我吗?感谢

hue

1 个答案:

答案 0 :(得分:2)

我不太确定这个问题的原因,但我认为这是因为旧版scala中的scala反射无法计算TypeTagyet not inferred函数参数。< / p>

在这种情况下,

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