Spark SQL开发中,往往会碰见不同类型格式的数据,本篇浅谈对几种常见数据格式的读取。Spark SQL通过SparkSession实例对象,提供对多种数据格式的读取。
1. 文件数据
1)文本格式【csv、txt、parquet等】
SparkSession对象的创建:
SparkSession session = SparkSession.builder().appName("test").master("local") .getOrCreate();
txt文件的读取:
A. Dataset<Row> txtdata = session.read().text("wc.txt");
B. Dataset<Row> txtdata = session.read().format("text").load("wc.txt");
两种方式都可实现对txt文件数据的读取,第一种方式更为针对性,而第二种方式则相对较为通用些,通过指定文件格式,再使用load方法加载指定路径下的文件数据。
csv文件的读取:
A. Dataset<Row> csvdata = session.read().csv("wc.txt");
B. Dataset<Row> csvdata = session.read().format("csv").load("wc.csv");
有几个常用配置参数,在开发中较为实用:
option("header", "true") // 文件中是否包含字段名,如果包含,第二个参数为true,会自动跳过第一行数据,对后面数据进行读取;第一行数据会自动封装成Dataset中的列名
option("encoding", "UTF-8") // 指定文件的字符编码,可防止由于开发工具的编码与文件字符编码不一致导致的乱码问题
Dataset<Row> txtdata = session.read().option("header", "true").option("encoding", "UTF-8").csv("wc.txt");
parquet文件的读取:
A. Dataset<Row> parquetdata = session.read().parquet("wc");
B. Dataset<Row> parquetdata = session.read().format("parquet").load("wc");
2. 关系型数据库数据
添加数据库连接必要的参数【参数名固定,不可变,值可根据实际情况修改】
Properties prop = new Properties();
prop.put("user", "root");
prop.put("password", "123123");
prop.put("driver", "com.mysql.jdbc.Driver");
Dataset<Row> test = session.read().jdbc("jdbc:mysql://node01:3306/test", "test", prop);
jdbc方法提供了多种参数配置,此处使用较为简便的一种举例,需要其他方式的,可查看API,根据实际需求进行选择。
3. Hive仓库数据
对hive中数据的读取,需要对SparkSession实例进行必要参数的设置:
SparkSession session = SparkSession.builder().appName("test").master("local")
.enableHiveSupport() // 开启hive支持,否则无法从hive中读取数据
.getOrCreate();
其次,需要添加hive的配置文件,以便程序对hive的操作:hive-site.xml
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://node01:9083</value>
</property>
</configuration>
对hive仓库数据的操作需要,开启hive服务:hive --service metastore
通过SparkSession的实例,使用HQL语句,对hive表中的数据进行读取
Dataset<Row> hivedata= session.sql("select * from table");
4. Hbase数据
对HBase数据的读取,需要借助hive与hbase的整合,将hbase的数据映射到hive的外部表,再由SparkSession对hive表的读取,即可获取HBase中的数据。