Spark SQL对不同数据源的读取

        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中的数据。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容