赞
踩
spark中支持多种数据源(jdbc、parquet、csv、json等),所以在可以读取多种类型的数据源。
csv格式的数据源,他的默认分隔符是",",可以使用Excel来打开,但是会出现数据乱码(因为CSV中不同操作系统的字符编码不一致);可以使用一下方式解决:https://jingyan.baidu.com/article/4dc408484776fbc8d846f168.html
parquet格式的数据源是以二进制的方式来保存数据,在保存数据时,会将数据按照字段来保存,同时还会保存各个字段的偏移量;在读取数据时,他会根据代码的内容(如果只读取部分字段),从对应的位置读取数据,这极大的加快了数据读取速度。
jdbc
//导入隐式转换 import spark.implicits._ /** * load方法不会获取数据库中的数据, * 但是他会获取数据库中表的schema信息。 */ //"read.format"表示指定读取的数据源种类 val logs: DataFrame = spark.read.format("jdbc").options( Map( //数据库连接,"bigdata"表示指定的数据库名 "url" -> "jdbc:mysql://localhost:3306/bigdata", //数据库的驱动 "driver" -> "com.mysql.jdbc.Driver", //指定读取数据库中的数据表 "dbtable" -> "logs", //指定读取数据库的用户 "user" -> "root", //指定读取数据库的密码 "password" -> "123568") ).load()
csv
//指定以后读取csv类型的数据
val csv: DataFrame = spark.read.csv("D:\\data\\out1\\csv")
csv.printSchema()
val pdf: DataFrame = csv.toDF("id", "name", "age")
pdf.show()
spark.stop()
json
//指定以后读取json类型的数据(有表头)
val jsons: DataFrame = spark.read.json("D:\\data\\out1\\json")
jsons.printSchema()
jsons.show()
spark.stop()
parquet
//指定以后读取json类型的数据
val parquetLine: DataFrame = spark.read.parquet("D:\\data\\out1\\parquet")
//val parquetLine: DataFrame = spark.read.format("parquet").load("/Users/zx/Desktop/pq")
parquetLine.printSchema()
parquetLine.show()
spark.stop()
/** * 将结果写入到指定的数据源中 */ val props = new Properties() props.put("user","root") props.put("password","root") /** * mode有四种方式,"Append","Overwrite", * "ErrorIfExists", "Ignore"; * "Overwrite"表示先将已有的表及其数据全都删除, * 再重新创建该表,最后插入新的数据; * "Append"表示如果表已经存在,则追加在该表中 * (此时,插入的字段名必须与数据库中的表的字段名相同,否则追加失败), * 若该表不存在,则会先创建表,再插入数据; * "Ignore"表示如果表不存在,则创建表,并存入数据; * 如果表存在的情况下,直接跳过数据的存储,不会报错,即不做任何操作 *"ErrorIfExists"为默认模式,表示如果数据库中已经存在该表, * 则会直接报异常,导致数据不能存入数据库 */ reslut.write.mode(SaveMode.ErrorIfExists).jdbc("jdbc:mysql://localhost:3306/test", "student3", props) /** * 将数据写入到json中 */ reslut.write.json("D:\\data\\out1\\json") /** * 将数据写入到csv中 */ reslut.write.csv("D:\\data\\out1\\csv") /** * 将数据写入到parquet中 */ reslut.write.parquet("D:\\data\\out1\\parquet") reslut.show() spark.close()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。