zoukankan      html  css  js  c++  java
  • Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用

    【摘要】 在Spark SQL中使用CarbonData

    【准备CarbonData】

    在浏览器地址栏输入以下链接,点击"download"按钮下载已经准备好的CarbonData jar包

    链接:https://github.com/QiangCai/carbonjars/blob/master/master/apache-carbondata-2.1.0-SNAPSHOT-bin-spark2.4.5-hadoop2.7.2.jar

    或者按以下指南编译carbondata源码

      1. 下载源码

    git clone https://github.com/apache/carbondata.git

      2. 编译源码

      参考:https://github.com/apache/carbondata/blob/master/build/README.md

      3. 编译完成后可以在如下目录找到CarbonData包

    ./assembly/target/scala-2.1x/apache-carbondata*.jar

    【准备Spark】

      1. 下载spark 2.4.5

      下载页面:https://spark.apache.org/downloads.html

      2. 本地启动spark-sql

    ./bin/spark-sql 
    --conf spark.sql.extensions=org.apache.spark.sql.CarbonExtensions 
    --jars <CarbonData jar 包路径>

    【使用CarbonData】

      1. 创建database 

    CREATE DATABASE carbondb location '<指定的database目录>';

      2. 设置为当前database

    USE carbondb;

      3. 创建CarbonData表(使用TPC-H lineitem表举例)

      创建lineitem在线商品信息表,在OPTIONS中sort_scope使用global_sort,并将sort_columns设置l_shipdate

      更多相关资料参考:https://github.com/apache/carbondata/blob/master/docs/ddl-of-carbondata.md

    CREATE TABLE IF NOT EXISTS lineitem(
      l_orderkey INT,
      l_partkey INT ,
      l_suppkey STRING,
      l_linenumber INT,
      l_quantity DOUBLE,
      l_extendedprice DOUBLE,
      l_discount DOUBLE,
      l_tax DOUBLE,
      l_returnflag STRING,
      l_linestatus STRING,
      l_shipdate DATE,
      l_commitdate DATE,
      l_receiptdate DATE,
      l_shipinstruct STRING,
      l_shipmode STRING,
      l_comment STRING) 
    USING carbondata
    OPTIONS('sort_scope'='global_sort', 'sort_columns'='l_shipdate');

      4. 入库数据

      支持直接入库TPC-H dbgen生成的CSV格式的数据文件lineitem.tbl

      或者直接使用本文附件中的lineitem.txt文件,包含了1000条样例数据;

      入库期间将使用表属性sort_scope和sort_columns的信息对输入数据进行排序处理。

      更多相关资料参考:https://github.com/apache/carbondata/blob/master/docs/dml-of-carbondata.md

    LOAD DATA INPATH 'lineitem.tbl/txt文件路径' INTO TABLE lineitem OPTIONS('delimiter'='|', 'header'='false');

      5. 查询

      TPC-H的query1语句查询指定发货日期之前的定价汇总报告;语句中含有l_shipdate的过滤操作,由于入库时已按该列对数据进行排序,因此查询时在driver侧通过索引能精确定位出含有过滤条件的数据块,减少了扫描的数据块数量。

      另外,carbondata列式存储格式支持push down projection,仅需要扫描语句中使用了的列数据;同时又支持push down filter, 仅需要扫描符合过滤条件的列数据,进一步减少扫描的数据量。

    SELECT 
      l_returnflag,
      l_linestatus,
      sum(l_quantity) AS sum_qty,
      sum(l_extendedprice) AS sum_base_price,
      sum(l_extendedprice*(1-l_discount)) AS sum_disc_price,
      sum(l_extendedprice*(1-l_discount)*(1+l_tax)) AS sum_charge,
      avg(l_quantity) AS avg_qty,
      avg(l_extendedprice) AS avg_price,
      avg(l_discount) AS avg_disc,
      count(*) AS count_order
    FROM lineitem
    WHERE l_shipdate <= date('1993-09-02')
    GROUP BY l_returnflag, l_linestatus
    ORDER BY l_returnflag, l_linestatus;

      

     lineitem.txt

    点击这里,了解更多精彩内容

  • 相关阅读:
    thread_Semaphore信号量
    c 语言文本文件判断是否到达结尾的问题
    c语言快速排序算法(转)
    c语言双向循环链表
    gtk+学习笔记(八)
    c语言循环链表的问题
    linux c获取本地时间
    gtk+学习笔记(七)
    gtk+学习笔记(六)
    gtk+学习笔记(五)
  • 原文地址:https://www.cnblogs.com/2020-zhy-jzoj/p/13164688.html
Copyright © 2011-2022 走看看