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:
Se agregó soporte para Image Source y Avro Source en Spark 2.4.
Liderando el mensaje:
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
- Guardar guardar datos
- Modo guardar (SaveMode)