Leer y escribir múltiples fuentes de datos de SparkSQL

Introducción: En el módulo SparkSQL, se proporciona una interfaz API completa para facilitar la lectura y escritura de datos de fuentes de datos externas (proporcionada desde Spark 1.4). El marco en sí tiene fuentes de datos externas integradas:

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Se agregó soporte para Image Source y Avro Source en Spark 2.4.

Liderando el mensaje:
Inserte la descripción de la imagen aquí

import org.apache.spark.sql.{
    
    DataFrame, SparkSession}

/**
 * @author liu a fu
 * @date 2021/1/18 0018
 * @version 1.0
 * @DESC  拓展  读取数据的方式   带头信息的
 */
object _12IrisDataLoader {
    
    
  def main(args: Array[String]): Unit = {
    
    
    //1-环境准备
    val spark: SparkSession = SparkSession
      .builder()
      .appName(this.getClass.getSimpleName.stripSuffix("$"))
      .master("local[*]")
      .getOrCreate()
    spark.sparkContext.setLogLevel("WARN")

    //读取数据
    val irisDF: DataFrame = spark.read.format("csv")
      .option("header", true) //是否有header,每个文件的文件头是否存在
      .option("inferschema", true) //内置的scheme的识别
      .option("sep", ",") //切割
      .load("data/input/sql/iris1.data")

    irisDF.show()
    irisDF.printSchema()

    spark.stop()
  }

}

Lectura y escritura de datos MySQL:

import java.util.Properties

import org.apache.spark.sql.{
    
    DataFrame, SaveMode, SparkSession}

/**
 * @author liu a fu
 * @date 2021/1/18 0018
 * @version 1.0
 * @DESC    实现MySQL数据的读写
 */
object _13ToMySQL {
    
    
  def main(args: Array[String]): Unit = {
    
    
    //1-环境准备
    val spark: SparkSession = SparkSession
      .builder()
      .appName(this.getClass.getSimpleName.stripSuffix("$"))
      .master("local[8]")
      .getOrCreate()

	//读取数据源文件
    val DF: DataFrame = spark.read.format("csv")
      .option("header", true)
      .option("inferschema", true)
      .option("sep", " ")
      .load("data/input/sql/people.txt")

      DF.printSchema()
    /**
     * root
     * |-- id: integer (nullable = true)
     * |-- name: string (nullable = true)
     * |-- age: integer (nullable = true)
     */

      DF.show()
    /**
     * +---+--------+---+
     * | id|    name|age|
     * +---+--------+---+
     * |  1|zhangsan| 20|
     * |  2|    lisi| 29|
     * |  3|  wangwu| 25|
     * |  4| zhaoliu| 30|
     * |  5|  tianqi| 35|
     * |  6|    kobe| 40|
     * |  7|    kobe| 41|
     * +---+--------+---+
     */

    /**
     * 写入MySQL
     */
    //方法1
/*    val prop = new Properties()
    prop.setProperty("user","root")
    prop.setProperty("password","root")
    DF
      .write
      .mode(SaveMode.Overwrite)
      .jdbc("jdbc:mysql://127.0.0.1:3306/sparktest?useSSL=false","person",prop)*/

    //写法2
 /*   DF
      .write
      .mode(SaveMode.Overwrite)
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "root")
      .jdbc("jdbc:mysql://127.0.0.1:3306/sparktest?useSSL=false", "person", new Properties())*/


    /**
     * 从MySQL中读取数据
     */
    val prop = new Properties()
    prop.setProperty("user","root")
    prop.setProperty("password","root")
    val fromMySQLToSpark: DataFrame = spark.read.jdbc("jdbc:mysql://127.0.0.1:3306/sparktest?useSSL=false", "person", prop)
    fromMySQLToSpark.show()

    //写入到csv.
    DF
      .coalesce(1)
      .write.mode("overwrite")
      .csv("data/output/xxxx")

    spark.stop()
  }
}

Explicación de parámetros:

  • Cargar Cargar datos para leer datos de fuentes de datos externas
    Inserte la descripción de la imagen aquí
  • Guardar guardar datos
    Inserte la descripción de la imagen aquí
  • Modo guardar (SaveMode)
    Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/m0_49834705/article/details/112804248
Recomendado
Clasificación