【问题标题】:Spark 2.0 - Convert DataFrame to DataSetSpark 2.0 - 将 DataFrame 转换为 DataSet
【发布时间】:2017-04-03 16:04:54
【问题描述】:

我想加载我的数据并对其进行一些基本的线性回归。所以首先,我需要使用VectorAssembler 来生成我的特征列。但是,当我使用 assembler.transform(df) 时,df 是 DataFrame,它需要 DataSet。我试过df.toDS,但它给出了value toDS is not a member of org.apache.spark.sql.DataFrame。事实上,它是org.apache.spark.sql.DatasetHolder 的成员。

我在这里做错了什么?

package main.scala

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.sql.functions._
import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.DatasetHolder
import org.apache.spark.ml.regression.LinearRegression
import org.apache.spark.ml.feature.RFormula
import org.apache.spark.ml.feature.VectorAssembler
import org.apache.spark.ml.linalg.Vectors

object Analyzer {
  def main(args: Array[String]) {

    val conf = new SparkConf()
    val sc   = new SparkContext(conf)
    val sqlContext = new SQLContext(sc)    
    import sqlContext.implicits._

    val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "false")
    .option("delimiter", "\t")
    .option("parserLib", "UNIVOCITY")  
    .option("inferSchema", "true")
    .load("data/snap/*")

    val assembler = new VectorAssembler()
    .setInputCols(Array("own", "want", "wish", "trade", "comment"))
    .setOutputCol("features")

    val df1 = assembler.transform(df)

    val formula = new RFormula().setFormula("rank ~ own + want + wish + trade + comment")
    .setFeaturesCol("features")
        .setLabelCol("rank")
}
}

【问题讨论】:

    标签: scala apache-spark dataframe dataset


    【解决方案1】:

    显然问题是因为我仍然使用Spark 1.6 风格的Spark 和SQLContext。我更改为SparkSession,transform() 能够隐式接受DataFrame。

    package main.scala
    
    import org.apache.spark.sql.SparkSession
    import org.apache.spark.sql.Dataset
    import org.apache.spark.ml.regression.LinearRegression
    import org.apache.spark.ml.feature.RFormula
    import org.apache.spark.ml.feature.VectorAssembler
    import org.apache.spark.ml.linalg.Vectors
    
    object Analyzer {
        def main(args: Array[String]) {
    
            val spark = SparkSession.builder().getOrCreate()
            import spark.implicits._
    
            val df = spark.read
            .format("com.databricks.spark.csv")
            .option("header", "false")
            .option("delimiter", "\t")
            .option("parserLib", "UNIVOCITY")  
            .option("inferSchema", "true")
            .load("data/snap/*")        
    
            df.show()
    
            val assembler = new VectorAssembler()
            .setInputCols(Array("own", "want", "wish", "trade", "comment"))
            .setOutputCol("features")
    
            val df1 = assembler.transform(df)
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-17
      • 1970-01-01
      • 2020-09-02
      • 2017-03-17
      • 1970-01-01
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      相关资源
      最近更新 更多