2017-01-02 2 views
0

Acyally bin am Funken 2.0.2 Ich würde gerne wissen, zum Beispiel auf logistische Regression basierend auf Spark ML zu arbeiten. Ich möchte jede Zeile des Datenrahmens in einen Vektor, der wird für die logistische Regression eingegeben werden, können Sie helfen, Zeile in den Datenrahmen zu bekommen, um jede Zeile in einen dichten Vektor zu bekommen. Danke. Hier, was ich getan habe, um den Datenrahmen zu bekommen.Datenrahmen in dichten Vektor Funke

import org.apache.spark.ml.classification.LogisticRegression 
import org.apache.spark.ml.linalg.{Vector, Vectors} 
import org.apache.spark.ml.param.ParamMap 
import org.apache.spark.sql.SparkSession 
import org.apache.spark.sql.Row 
import org.apache.hadoop.fs.shell.Display 

object Example extends App { 
val sparkSession = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate() 
val data=sparkSession.read.option("header", "true").csv("C://sample_lda_data.csv").toDF() 
val data2=data.select("col2","col3","col4","col5","col6","col7","col8","col9") 

am Ende ich so etwas wie dies als Input für die logistische Regression in der ersten Position bekommen wird es die erste Spalte des Datenrahmen jede Hilfe sein bitte

val data=sparkSession.read.option("header", "true").csv("C://sample_lda_data.csv").toDF() 
val data2=data.select("col2","col3","col4","col5","col6","col7","col8","col9") 
val assembler = new VectorAssembler().setInputCols(Array("col2", "col3", "col4")).setOutputCol("features") 
val output = assembler.transform(data2) 

main" java.lang.IllegalArgumentException: Data type StringType is not supported. 

werde ich sein so gratefull.Thank euch

+0

können Sie [VectorAssembler] (https://spark.apache.org/docs/2.0.2/ml-features.html#vektorasembler) verwenden. – mtoto

+0

@mtoto ich benutzte, was Sie sagten, ich editierte den Code ich habe diesen Fehler main "java.lang.IllegalArgumentException: Datentyp StringType wird nicht unterstützt.Alle Hilfe –

+1

alle Ihre cols sollte numerisch sein – mtoto

Antwort

2

Sie die array Funktion verwenden können und dann Karte in LabeledPoint s:

import org.apache.spark.mllib.linalg.Vectors 
import org.apache.spark.mllib.regression.LabeledPoint 
import org.apache.spark.sql._ 
import org.apache.spark.sql.functions._ 
import org.apache.spark.sql.types.DoubleType 

// create an array column from all but first one: 
val arrayCol: Column = array(df.columns.drop(1).map(col).map(_.cast(DoubleType)): _*) 

// select array column and first column, and map into LabeledPoints 
val result: Dataset[LabeledPoint] = df.select(col("col1").cast(DoubleType), arrayCol) 
    .map(r => LabeledPoint(
    r.getAs[Double](0), 
    Vectors.dense(r.getAs[mutable.WrappedArray[Double]](1).toArray) 
)) 

// You can use the Dataset or the RDD 
result.show() 
// +-----+---------------------+ 
// |label|features    | 
// +-----+---------------------+ 
// |1.0 |[2.0,3.0,4.0,0.5] | 
// |11.0 |[12.0,13.0,14.0,15.0]| 
// |21.0 |[22.0,23.0,24.0,25.0]| 
// +-----+---------------------+ 

result.rdd.foreach(println) 
// (1.0,[2.0,3.0,4.0,0.5]) 
// (21.0,[22.0,23.0,24.0,25.0]) 
+0

Bitte, was sind die Import-Paket Sie verwendet thnx für deine Hilfe, teste deinen Code Thnx wieder –

+0

Sorry mein Freund bin neu zu scala und funken, ich habe eine Fehlermeldung, dass $ ist kein Mitglied von StringContext thnx im Voraus –

+0

Oh, das ist ein weiterer fehlender Import ('import sparkSession .implicits._'), füge das hinzu oder ersetze '$ 'col1" 'mit' col ("col1") ' –

0
I have wrote code to convert dataframe's numeric columns into dense vector. Please find below code. Note: here col1 and col2 are numeric type columns. 

import sparksession.implicits._; 
    val result: Dataset[LabeledPoint] = df.map{ x => LabeledPoint(x.getAs[Integer]("Col1").toDouble, Vectors.dense(x.getAs[Double]("col2"))) } 
    result.show(); 
result.printSchema(); 

+-------+----------+ 
| label| features| 
+-------+----------+ 
|31825.0| [75000.0]| 
|58784.0| [24044.0]| 
| 121.0| [41000.0]| 

root 
|-- label: double (nullable = true) 
|-- features: vector (nullable = true) 
Verwandte Themen