对于结构化数据,我们都可以将其存放到数据库中,尤其在Spark2.0以后,Spark开始用dataframe为核心的API来处理数据。dataframe的结构与SQL结构非常相似,但DataFrame的数据类型不一定与SQL中字段的数据类型兼容,这里分两种情况来说明DataFrame存入数据库。本篇首先介绍简单的数据类型下,如何存入数据库。
假如现在有个文本如下:
1001,zhangsan,23,nan,CS
1002,lisi,22,nv,CS
1003,wangwu,20,nan,MA
1004,zhaoliu,19,nan,MA
1005,qianqi,25,nv,CS
上面的数据均是简单的数据类型,如整型、字符串等,这类可以将文本读成DataFrame后可以直接存入到SQL中。
代码如下:
package core
import org.apache.spark.sql.SparkSession
object df2sql {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder()
.appName("df2sql").master("local").getOrCreate()
val df = spark.read.format("text").load("F:/ida/stu.txt")
import org.apache.spark.sql.functions._//split函数为SQL函数
val Df2 = df.withColumn("splitcol",split(col("value"), ",")).select(
col("splitcol").getItem(0).as("id"),
col("splitcol").getItem(1).as("name"),
col("splitcol").getItem(2).as("age"),
col("splitcol").getItem(3).as("gender"),
col("splitcol").getItem(4).as("dept")
)//.drop("splitcol")
println("======================================")
val url = "jdbc:mysql://172.30.16.80:3306/textcluster?characterEncoding=UTF-8"
val table="student"//student表可以不存在,但是url中指定的数据库要存在
val prop = new java.util.Properties
prop.setProperty("user","root")
prop.setProperty("password","123")
Df2.write.mode("append").jdbc(url, table, prop)
}
}
对于DataFrame字段中是复合数据类型时,参考Spark DataFrame写入MySQL数据库(二)