大数据时代的小数据神器 - asqlcell
自从Google发布了经典的MapReduce论文,以及Yahoo开源了Hadoop的实现,大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下,数据分析开始从过去的采样抽查变成全量整体,原先被抽样丢弃的隐藏信息的价值也随之突现,数据拥有者可以发现新的关联信息,找到更细维度的特征,做出更精准的预测...
一说到大数据体系建设,各种高大上的概念自然就开始满天飞,数仓,数据湖,湖仓一体,流式计算名词一套套的。诚然对于一个每天产生巨量数据的大型企业来说,这些基础设施都是不可或缺的,甚至为了体系建设牺牲一定的灵活性也是可以接受的。但是对于大多数中小企业,或者是一些大型机构的分析师来说,真的需要这么一套庞大的体系吗?
对于大多数数据工作者来说,目前的工作流程是这样的。拿到原始数据,,要么导入Excel开始工作,要么申请数据导入数据仓库,然后在公司自建平台开始工作。单纯使用Excel处理的数据极限不超过100万行,再往上性能就不可接受。而且Excel对工程也不友好,各种误操作不容易发现记录,函数VB之类的屠龙之技在实际工作中还是存在较高的使用门槛。对于后一种情况则是依赖于公司流程的响应速度,在某些公司可能实际分析工作不到30分钟就能完成,但是入仓走流程就花了两天。
虽然现在Python非常火爆,相关的数据分析处理工具也层出不穷,但是对于大多数数据工作者来说,SQL是他们熟悉的语言。相比于面向过程的Python来说,SQL是描述性语言,只需要遵循规范告诉系统你想做什么,后台会自动完成任务的执行,而使用Python需要自己设计算法,告诉系统如何去执行,相比之下,SQL的学习门槛与表达能力要大大强于Python。业界一直在思考的问题,能否存在一个工具使得我们能结合Python与SQL的优点,快速的对源数据上手进行分析?
在进一步探讨这个问题之前,我们要回答多大的数据量算大数据?根据百度上的参考,toC的话千万级以上的数据,toB的话大概在10万级别。在这里我已某个经过数字化改造的线下广告行业为例,该公司拥有100万块线下数字显示屏,每周投放的数据量就是100万条数据,每条数据大小约为20K,那么总数据量就大约在20GB。对于这个级别的数据,使用标准的分布式大数据处理引擎固然没有问题,但是在硬件价格飞速下降的今天,特别是内存和磁盘,这个级别的数据量有没有可能在单机直接完成处理?
答案是可以的,这也是我们今天要谈的小数据,即单台电脑可以加载并完成处理的数据集合。今天向大家推荐一个小数据处理神器asqlcell,这个神器是jupyter lab的插件,通过"pip install sqlcell"及可快速完成安装。通过这个插件,允许你直接使用csv文件作为数据源,通过SQL完成对数据的分析处理,同时还支持Python与SQL的混合编程,充分发挥不同编程语言的长处,提高解决问题的效率。
下面我们来看一个例子,从Kaggle下载2020美国大选数据,打开jupyter lab,新建笔记本,导入asqlcell这个插件。
import asqlcell
导入插件后,使用sql的语法如下:%%语法代表这个单元格的输入是sql语句。
%%sql 数据集名字
你的sql脚本
下面我们加载每个县的总统选取数据到数据集president_county_candidates,这个数据集是pandas的dataframe类型,并且可用于其它sql的输入源。
%%sql president_county_candidates
select * from 'us2020/president_county_candidate.csv'
执行后结果如下,csv文件大小约1.5M,3万多条数据,30毫秒完成加载。并且返回的结果数据集支持翻页全量查看。并且对于数值类型的列,在标题栏添加了一个数值分布示意图。
下面我们要做的是根据每个县的结果,找出每个州得票最多的候选人并统计票数。对于SQL和Python都不是特别熟悉的同学,比如我来说,可以通过走一步看一步的方式一步步得到想要的结果:
1. 将原始数据按周和候选人进行group并统计每个候选人的的票信息
%%sql state_result
select state, candidate, sum(total_votes) as total
from president_county_candidates
group by state, candidate
order by state, total desc
2. 根据上一步的结果,做一个子查询先统计每个周选票最多候选人的得票数量,然后select查询去匹配这个得票数量。
%%sql state_winner
select * from state_result
where (state, total) in (select (state, max(total)) from state_result group by state
)
order by total desc
3. 我们还可以使用混合编程的模式把以上两个单元格的内容合并在一起:
state_result = %sql select state, candidate, sum(total_votes) as total from president_county_candidates group by state, candidate order by state, total desc
state_winner = %sql select * from state_result where (state, total) in (select (state, max(total)) from state_result group by state) order by total desc
state_winner
相比传统数据处理模式,asqlcell有以下优点:
- 处理数据大小只受内存限制,对于一般非在线业务的中小企业,一台服务器足以装下所有数据并进行处理,数据开箱即用。
- 加载速度块,一个大小100M,有大约250万行数据的csv文件,0.7秒内完成加载。如果原始数据经过预处理为针对列压缩的parquet格式,只需0.2秒即可完成加载。
- 后台分析引擎使用基于内存的duckdb,速度快,OLAP查询SQL语法支持完善,学习门槛低。
- 支持Python混合编程,降低学习成本,同时最大限度发挥Python与SQL各自的优势。
随着硬件成本的不断降低,小数据的处理规模也会不断上升。对于一般非在线业务企业来说,如果能做到GB级别数据的开箱即用式分析,生产效率将大大提高,同时也可以降低基础设施的建设成本。
项目代码地址:GitHub - datarho/asqlcell
欢迎提出宝贵意见。!
相关文章:
大数据时代的小数据神器 - asqlcell
自从Google发布了经典的MapReduce论文,以及Yahoo开源了Hadoop的实现,大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下,数据分析开始从过去的采样抽查变成全量整体,原先被抽样丢弃的隐藏…...
【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问: “做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”? 首先这个要求我觉得挺正常&a…...
67. 二进制求和
文章目录题目描述竖式模拟转换为十进制计算题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” …...
1555数列极差(队列 优先队列 )
目录 题目描述 解题思路 代码部分 题目描述 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得…...
代码随想录算法训练营第二十七天 | 93.复原IP地址,78.子集,90.子集II
一、参考资料复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/子集题目链接/文章讲解:https://programmercarl.com/0078.…...
jvm类加载器
概念 Bootstarp ClassLoader (引导类加载器) 加载String等核心的类Ext ClassLoader (拓展类加载器)System ClassLoader (系统类加载器) 加载用户自定义的类 关系 BootstrapClassLoader 包含 ExtClassLoaderExtClassLoader 包含 SystemClassLoader彼此是包含关系,不…...
Rust学习入门--【7】Rust 数据类型
类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...
阅读MySQL必知必会,查缺补漏
MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...
MySQL数据库10——多表连接查询
数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...
华为OD机试 - 括号检查(Python)| 真题含思路
括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...
安全渗透测试中的一款免费开源的超级关键词URL采集工具
安全渗透测试中的一款免费开源的超级关键词URL采集工具。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具,支持研究学习,切勿用于非法犯罪活动,对于恶意使…...
数据资产管理实践白皮书(6.0版)解读
目录 第一章数据资产管理概述 ( 一 ) 数据资产管理和数据要素的关系...
c/c++开发,无可避免的函数指针使用案例
一、函数指针简介 函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。例如: char* (*pf1)(char * p1,char *p2); 这是一个函数指针,其…...
QT(12)-QThreadPool
1 简介 QThreadPool是Qt框架中的一个类,提供了一组工作线程池。该线程池自动管理一组工作线程,在线程可用时分配任务。使用线程池的主要优点是,它可以减少创建和销毁线程的开销,因为可以重复使用线程。 线程池设计用于场景中&am…...
【Java|golang】1138. 字母板上的路径
我们从一块字母板上的位置 (0, 0) 出发,该坐标对应的字符为 board[0][0]。 在本题里,字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”],如下所示。 我们可以按下面的指令规则行动: 如果方格存…...
Flink 1.14从简单到源码第三讲
文章目录 1.flink多流操作Api1.1split 分流操作1.2.侧输出流1.3.connect 连接操作1.4.union 操作1.5 coGroup 协同分组1.6 join1.7 broadcast 广播2.process3.并行度和Api3.1 任务提交简单流程3.2 task与算子链4. Flink 时间相关(窗口计算)4.1时间语义(窗口计算)4.2 新版api指定…...
淘宝API接口系列,获取购买到的商品订单列表,卖出的商品订单列表,订单详情,订单物流,买家信息,收货地址列表,买家token
custom自定义API操作buyer_order_list获取购买到的商品订单列表buyer_order_detail获取购买到的商品订单详情buyer_order_express获取购买到的商品订单物流buyer_address_list收货地址列表buyer_address_add添加收货地址buyer_info买家信息buyer_token买家tokenseller_order_li…...
ucos-ii 的任务调度原理和实现
ucosii 任务调度和原理1、ucos-ii 任务创建与任务调度 1.1、任务的创建 当你调用 OSTaskCreate( ) 进行任务的创建的时候,会初始化任务的堆栈、保存cpu的寄存器、创建任务的控制块(OS_TCB)等的操作; if (OSTCBPrioTbl[prio] (OS_…...
Solon2 开发之容器,七、切面与函数环绕拦截
想要环绕拦截一个 Bean 的函数。需要三个前置条件: 通过注解做为“切点”,进行拦截(不能无缘无故给拦了吧?费性能)Bean 的 method 是被代理的在 Bean 被扫描之前,完成环绕拦截的注册 1、定义切点和注册环…...
代码随想录第十天(28)
文章目录28. 找出字符串中第一个匹配项的下标看答案KMPnext数组(前缀表)最长公共前后缀如何计算前缀表前缀表与next数组时间复杂度分析28. 找出字符串中第一个匹配项的下标 莫得思路……好久没做题,都已经忘得差不多了 看答案 其实就是自己…...
循环队列来了解一下!!
笔者在之前的一篇文章,详细的介绍了:队列之单向链表与双向链表的模拟实现:https://blog.csdn.net/weixin_64308540/article/details/128742090?spm1001.2014.3001.5502 感兴趣的各位老铁,可以参考一下啦!下面进入循环…...
Idea打包springboot项目war包,测试通过
pom.xml文件 <!--包名以及版本号,这个是打包时候使用,版本可写可不写,建议写有利于维护系统--> <artifactId>tsgdemo</artifactId> <version>0.0.1-SNAPSHOT</version> <!--打包形式--> <packaging&…...
python+django高校师生健康信息管理系统pycharm
管理员功能模块 4.1登录页面 管理员登录,通过填写注册时输入的用户名、密码、角色进行登录,如图所示。 4.2系统首页 管理员登录进入师生健康信息管理系统可以查看个人中心、学生管理、教师管理、数据收集管理、问卷分类管理、疫情问卷管理、问卷调查管理…...
CUDA中的流序内存分配
文章目录CUDA中的流序内存分配1. Introduction2. Query for Support3. API Fundamentals (cudaMallocAsync and cudaFreeAsync)4. Memory Pools and the cudaMemPool_t注意:设备的内存池当前将是该设备的本地。因此,在不指定内存池的情况下进行分配将始终…...
开源、低成本的 Xilinx FPGA 下载器(高速30MHz)
目前主流的Xilinx下载器主要有两种:一种是Xilinx官方出品的Xilinx Platfom Cable USB,还有一个就是Xilinx的合作伙伴Digilent开发的JTAG-HS3 Programming Cable。 JTAG-HS系列最大支持30MHz下载速度,基于FTDI的FT2232方案。 JTAG-HS系列对比…...
Maven专题总结
1. 什么是Maven Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和…...
谷粒商城--SPU和SKU
目录 1.SPU和SKU概念 2.表的关系理解 3.导入前端代码 4.完善后端接口 5.属性分组详情 6.规格参数详情 7. 销售属性详情 8.分组与属性关联 9.发布商品 10.仓库服务 1.SPU和SKU概念 SPU:standard product unit(标准化产品单元):是商品信息聚合的…...
二叉树OJ题(上)
✅每日一练:100. 相同的树 - 力扣(LeetCode) 题目的意思是俩棵树的结构不仅要相同,而且每个节点的值还要相同,如果满足上面2个条件,则成立! 解题思路: 从三个方面去考虑࿱…...
第一章 PDF语法
第一章 PDF语法PDF ObjectsNull ObjectsBoolean ObjectsNumeric ObjectsName ObjectsString ObjectsArray ObjectsDictionary ObjectsName treesNumber treesStream ObjectsDirect versus Indirect ObjectsFile StructureWhite-SpaceThe Four Sections of a PDFHeaderTrailerBo…...
IntelliJ IDEA 创建JavaFX项目运行
IntelliJ IDEA 创建JavaFX项目运行JavaFX官网文档:https://openjfx.io/openjfx-docs/ JavaFX 2008年12月05日诞生,是一个开源的下一代客户端应用程序平台,适用于基于 Java 构建的桌面、移动和嵌入式系统。这是许多个人和公司的协作努力&#…...
网站设计制作全网优惠/免费顶级域名申请网站
通过对TCP/IP协议的学习,本人写了一个可以实现对PCAP文件中的IPV4下的TCP流提取,以及提取指定的TCP流,鉴于为了学习,没有采用第三方包解析pcap,而是对bytes流进行解析,其核心思想为:若想要提取T…...
wordpress文章发布没有页面/网络营销相关工作岗位
一个注解就能搞定分页,为何你的却那么复杂一个java程序员都避免不了增删改查,最近这几天又开始去写增删改查的接口了。这个时候就避免不了做数据的分页。所以这几天写下来发现,即使使用了 pagehelper 分页插件,去对数据物理分页。虽然 pagehe…...
政府网站系统统一/厦门seo公司到1火星
关键字:身份证识别、二代证识别、二代身份证识别、OCR、Android身份证识别、IOS身份证识别、身份证扫描识别、身份证拍照识别 应用背景 随着智能终端(智能手机及平板电脑)及移动 通信(3G)的发展,原来运行在…...
需要做网站的企业资源/网络营销郑州优化推广公司
Git是一款开源的分布式版本控制系统,它的出现和Linux紧密相关。Linux内核项目组为了能更好地管理和维护Linux内核开发,于2002年开始启用商业的分布式版本控制系统BitKeeper。虽然软件开发商授权了Linux社区能免费使用,但是好景不长࿰…...
商标查询网站/短视频营销策划方案
一.冒泡排序 冒泡排序是运行最慢点排序算法,但是确实最简单的。 下图可以理解为队员排队。 遵循的规则: 1. 比较两个队员。 2. 如果左边的队员高,则两队员位置交换。 3. 向右移动一个位置,比较下…...
信宜网站建设公司/免费seo技术教程
MongoDB 下载下来 下载地址 安装 mongdb 服务启动 进入安装目录 C:\Program Files\MongoDB\Server\3.4\bin ./mongod –dbpath d:\data\db # 这个目录一定要存在 mongdb 默认端口 27017 一、导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSO…...