Spark lee datos de MySQL (Oracle) y los guarda en formato libsvm

formato de datos libsvm:

Los formatos de archivo de datos de entrenamiento y datos de prueba utilizados por libsvm son los siguientes:

 [label] [index1]:[value1] [index2]:[value2][label] [index1]:[value1] [index2]:[value2]

El valor de destino de la etiqueta , es decir, la clase (a qué categoría pertenece), es el tipo que desea clasificar, generalmente un número entero.

index es un índice secuencial, generalmente un número entero continuo. Se refiere al número de función, que debe organizarse en orden ascendente.

El valor es el valor propio, los datos utilizados para el entrenamiento, generalmente compuestos por un grupo de números reales.

cual es:

目标值   第一维特征编号:第一维特征值   第二维特征编号:第二维特征值 …
 
目标值   第一维特征编号:第一维特征值   第二维特征编号:第二维特征值 …
 
……
 
目标值   第一维特征编号:第一维特征值   第二维特征编号:第二维特征值 …

Por ejemplo: 5 1: 0.6875 2: 0.1875 3: 0.015625 4: 0.109375

Indica que las funciones de entrenamiento tienen 4 dimensiones, la primera dimensión es 0,6875, la segunda dimensión es 0,1875, la tercera dimensión es 0,015625 y la cuarta dimensión es 0,109375. El valor objetivo es 5.

Nota: El formato de los datos de entrenamiento y prueba debe ser el mismo, como se muestra arriba. El valor objetivo en los datos de prueba es para el cálculo de errores.

confiar:

	<properties>
        <scala.version>2.11.8</scala.version>
        <spark.version>2.2.0</spark.version>
    </properties>
    <repositories>
        <repository>
            <id>cloudera</id>
            <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>${scala.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.11</artifactId>
            <version>${spark.version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>2.6.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_2.11</artifactId>
            <version>2.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib-local_2.11</artifactId>
            <version>2.2.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>

Ejemplo de código:

package com.spark.milib

import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
import org.apache.spark.mllib.util.MLUtils
import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{
    
    DataFrame, Row, SparkSession}

object SqlDataToLibsvm {
    
    
  def main(args: Array[String]): Unit = {
    
    

    val sparkSession: SparkSession = SparkSession.builder().appName("test").master("local[4]").getOrCreate()

    val dataFrame: DataFrame = sparkSession.read.format("jdbc")
      .option("url", "jdbc:mysql://localhost:3306/test11")
      .option("dbtable", "tablename2")
      .option("user", "root")
      .option("password", "123")
      .load()

    dataFrame.createTempView("dataFrame")
    val frame: DataFrame = sparkSession.sql("select T_FACTOR,MP_ID,TG_ID,SJD,P0,P1,P2,P3,I1,I2,I3,U1,U2,U3 from dataFrame")

    val rdd: RDD[Row] = frame.rdd

    val data = rdd.map{
    
     line =>

      //此时line数据格式为:[22.0,11.0,11.0,12.0,22.0,33.0,22.0,23.0,24.0,11.0,23.0,13.0,25.0,23.0]
      //切割数据外面的中括号
      val lineStr: String = line.toString().substring(1,line.toString().length-2)
      val values = lineStr.toString().split(",").map(_.toDouble)
      //init返回除了最后一个元素的所有元素,作为特征向量
      //Vectors.dense向量化,dense密集型
      val feature = Vectors.dense(values.init)
      val label = values.last
      LabeledPoint(label, feature)
    }

    MLUtils.saveAsLibSVMFile(data,"D:\\test")
  }
}

efecto:

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_44455388/article/details/107342126
Recomendado
Clasificación