目录
-
介绍
Spark SQL可以与多种数据源交互,如普通文本、json、parquet、csv、MySQL等
1.写入不同数据源
2.读取不同数据源
-
写数据
//创建SparkSession
val spark: SparkSession = SparkSession.builder().master("local[*]").appName("test11").getOrCreate()
//根据SparkSession创建SparkContext
val sc: SparkContext = spark.sparkContext
sc.setLogLevel("WARN")
//读取文件
val fileRDD: RDD[String] = sc.textFile("hdfs://node01:8020/user.txt")
//处理数据
val linesRDD: RDD[Array[String]] = fileRDD.map(_.split(" "))
val rowRDD: RDD[Person] = linesRDD.map(line => Person(line(0).toInt, line(1), line(2).toInt))
//将RDD转成DF
//注意:RDD中原本没有toDF方法,新版本中要给它增加一个方法,可以使用隐式转换
import spark.implicits._
//注意:上面的rowRDD的泛型是Person,里面包含了Schema信息
//所以SparkSQL可以通过反射自动获取到并添加给DF
val personDF: DataFrame = rowRDD.toDF
//==================将DF写入到不同数据源===================
//写入json、parquet、csv、MySQL
//写入json
personDF.write.json("C:\\Users\\86132\\Desktop\\555\\json")
//写入csv
personDF.write.csv("C:\\Users\\86132\\Desktop\\555\\csv")
//写入parquet
personDF.write.parquet("C:\\Users\\86132\\Desktop\\555\\parquet")
//写入MySQL
val prop = new Properties()
prop.setProperty("user", "root")
prop.setProperty("password", "root")
personDF.write.mode(SaveMode.Overwrite).jdbc(
"jdbc:mysql://localhost:3306/bigdata?characterEncoding=UTF-8", "person", prop)
println("写入成功")
sc.stop()
spark.stop()
-
读数据
//创建SparkSession
val spark: SparkSession = SparkSession.builder().master("local[*]").appName("test12").getOrCreate()
//根据SparkSession创建SparkContext
val sc: SparkContext = spark.sparkContext
sc.setLogLevel("WARN")
//读取文件
//读取json
spark.read.json("C:\\Users\\86132\\Desktop\\555\\json").show()
//读取csv
spark.read.csv("C:\\Users\\86132\\Desktop\\555\\csv").toDF("id","name","age").show()
//读取parquet
spark.read.parquet("C:\\Users\\86132\\Desktop\\555\\parquet").show()
//读取mysql
val prop = new Properties()
prop.setProperty("user","root")
prop.setProperty("password","root")
spark.read.jdbc(
"jdbc:mysql://localhost:3306/bigdata?characterEncoding=UTF-8","person",prop).show()
sc.stop()
spark.stop()
-
总结
SparkSQL写数据:
DataFrame/DataSet.write.json/csv/jdbc
SparkSQL读数据:
SparkSession.read.json/csv/text/jdbc/format