spark sql产生

spark sql未出现前,hive以其对sql的完美支持成为数据仓库的主流方案。但是由于hive的任务最终都会转化未mapreduce任务,因此它的查询性能一致备受诟病。
后来,伯克利实验室的开发人员开发了spark sql组件。
spark sql 组件在兼容hive的同时,能成倍提升处理数据的效率,并可与spark其他组件完美兼容。

DataFrame,DataSet

DataFrame和DataSet与Rdd类似,spark sql中通过使用DataFrame与DataSet提供的各种算子完成计算任务。

DataFrame 也是一个分布式数据容器。然而 DataFrame 更像传统数据库的二维
表格,除了数据以外,还记录数据的结构信息,即 schema。
在这里插入图片描述

spark 2.x中DataFrame用DataSet类型表示。

type DataFrame = Dataset[Row]

Dataset除了具有DataFrame的所有特性,还具有面向对象的特性。Dataset中的类型支持自定义。

案例

下面一个简单的案例演示spark sql的基本使用,读取json文件并输出。

Basic.java

public class Basic {

    public static void main(String[] args) {

        SparkConf sparkConf = new SparkConf();
        sparkConf.setAppName("sparksql basic");
        sparkConf.setMaster("local[*]");

        SparkSession.Builder builder = SparkSession.builder();
        builder.config(sparkConf);
        SparkSession sparkSession = builder.getOrCreate();

        Dataset<Row> dataset = sparkSession.read().json("input/people.json");

        dataset.printSchema();
        dataset.show();

        dataset.createOrReplaceTempView("people");
        Dataset result = sparkSession.sql("select * from people");

        result.show();
    }
}

people.json

{"name": "zhangsan", "age": 20}
{"name": "lisi", "age": 23}
{"name": "wangwu", "age": 40}
{"name": "zhaoliu", "age": 70}

pom.xml

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.3.0</version>
</dependency>
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐