大数据时代的小数据神器 - 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. 找出字符串中第一个匹配项的下标 莫得思路……好久没做题,都已经忘得差不多了 看答案 其实就是自己…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
