代码之家  ›  专栏  ›  技术社区  ›  Dale Angus

Spark ML库

  •  0
  • Dale Angus  · 技术社区  · 6 年前

    我正在测试我在MLlib:Main指南中找到的Scala代码 Machine Learning Library (MLlib) Guide

    import org.apache.spark.ml.linalg.{Matrix, Vectors, Vector}
    import org.apache.spark.ml.stat.Correlation
    import org.apache.spark.sql.Row
    import scala.collection.Seq
    
    object BasicStatistics {
      def main(args: Array[String]): Unit = {
    
        val data: Seq[Vector] = Seq(
          Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))),
          Vectors.dense(4.0, 5.0, 0.0, 3.0),
          Vectors.dense(6.0, 7.0, 0.0, 8.0),
          Vectors.sparse(4, Seq((0, 9.0), (3, 1.0))))
    
        val df = data.map(Tuple1.apply).toDF("features")
        val Row(coeff1: Matrix) = Correlation.corr(df, "features").head
        println(s"Pearson correlation matrix:\n $coeff1")
    
        val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head
        println(s"Spearman correlation matrix:\n $coeff2")
    
      }
    }
    

    但此行报告了一个错误。

    val df = data.map(Tuple1.apply).toDF("features")
    

    上面说, “value toDF不是Seq[(org.apache.spark.ml.linalg.Vector,)]的成员”

    值数据(Seq[向量])似乎没有映射方法?

    关于如何进行有什么想法吗?

    下面是我的pom。xml

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-mllib -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.11</artifactId>
            <version>2.3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.3.0</version>
        </dependency>
    
    </dependencies>
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   Haroun Mohammedi    6 年前

    这是因为缺少的隐式转换 scala.Seq

    要解决您的问题,请添加这些行

    val name = "application name"
    val spark = SparkSession
      .builder
      .appName(name)
      .master("local")
      .getOrCreate()
    
    import spark.implicits._
    

    希望有帮助!

        2
  •  0
  •   hoyland    6 年前

    此时,您没有 SparkSession 或任何开始的事情。我相信 toDF 来自导入 spark.implicits._ 哪里 spark 是一个 火花会话 。文档有时没有明确说明这一点,并且/或者假设您正在Spark shell中工作,Spark shell会自动创建会话。

    您的代码确实在spark shell中运行。