Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用

摘要:
[摘要]在SparkSQL中,使用CarbonData[准备CarbonData]在浏览器地址栏中输入以下链接,

【摘要】 在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

Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用第1张

  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;

  

Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用第2张 lineitem.txt

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

免责声明:文章转载自《Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Nginx大并发优化实战重新导入依赖的常见方式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

hdu 3579 Hello Kiki (中国剩余定理)

Hello Kiki Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1943    Accepted Submission(s): 693 Problem Description One day I...

Mysql基础01-语法

数据库 数据的存储:将数据放到表中,表再放到库中。 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。 表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义 表中的数据是按行存储的,一行即为一条记录。 MySQL下载安装略过 MySQL设置命令 net sta...

jwt token

jwt使用配置: settings文件中添加: REST_FRAMEWORK = { # 异常处理 自定义的异常处理类 'EXCEPTION_HANDLER': 'drf_meiduo.utils.exceptions.exception_handler', 'DEFAULT_AUTHENTICATION_CLASSES': (...

【华为云技术分享】基于华为云IOT及无线RFID技术的智慧仓储解决方案最佳实践系列一

摘要:仓储管理存在四大细分场景:出入库管理、盘点、分拣和货物跟踪。本系列将介绍利用华为云IOT全栈云服务,端侧采用华为收发分离式RFID解决方案,打造端到端到IOT智慧仓储解决方案的最佳实践。 仓储是什么?仓储,是物流生命周期很重要的一部分,首先了解什么物流。 物流,顾名思义“物的流通”,指从物品的供应地向接收地流通,是一个根据实际需要,将运输、核算、储存...

linux下svn的co如何排除目录

某些原因想在svn co的时候排除某些目录,可以绕个圈子,分三步来完成:co外层目录:svn checkout --depth empty $URL [$LOCATION]完成之后,会有一个只包含空目录的根目录设置忽略目录:cd $LOCATIONsvn up --set-depth exclude <$DIR_TO_EXCLUDE>这样svn...

AE加载不同数据的方法(GeoDatabase空间数据管理)

先看一下GeoDatabase核心结构模型图:     1  工作空间工厂WorkspaceFactory对象    WorkspaceFactory是GeoDatabase的入口,是一个抽象类,拥有很多子类,例如SdeWorkspaceFactory, AccessWorkspaceFactory, ShapfileWorkspaceFactory ...