【用户画像(二)】Python操作ES(支持sql)及ES整合Hive,Spark,MySQL
SQL与ElasticSearch对应关系(※)
SQL
Elasticsearch
column(列)
field(字段)
row(行)
document(文档)
table(表)
index(索引)
schema(模式)
mapping(映射)
database(数据库)
Elasticsearch集群实例
Python操作ElasticSearch
上面说到ElasticSearch既然是个数据库那么必然会像MySQL一样可以通过pymysql这中类似的组件进行各种操作.
但是局限于原生的ElasticSearch的命令基本都是Restful风格的代码, 学习的难度未免会有所增加.
原生的RestfulAPI风格在上篇文章介绍过了,这里就不多bb了.
创建(配置)虚拟环境
如果你的虚拟环境中已经有了ElasticSearch这个插件,那么直接切换到虚拟环境就好.
如果没有就需要手动安装了.
12345678# 使用Anaconda虚拟环境管理器, 方便解决版本冲突的问题conda create -n es_env python==3.7.1 ...
【用户画像(一)】技术选型及ElasticSearch与后台启动命令
画像项目介绍项目分类
数据仓库
离线数仓面向数据分析、报表服务
分层管理、维度建模
Hive实现
用户画像
构建在数据仓库之上
toC
toB
推荐系统
用户画像之上
淘宝等电商平台
抖音 快手等内容平台
广告
社交
Lambda架构
离线+实时
batch layer 批处理层
speed layer 速度层
service layer 服务层
kappa架构-流批一体
What用户画像 就是给用户打上海量的标签, 根据用户的目标, 行为和观点差异将用户区分成不同的类型, 从每种类型中提出出关键的信息(标签的名字) 形成人物原型, 实际就是用户信息的标签化。
个体用户画像
群体用户画像
Why
数据业务化-加深用户认知,指导业务开展
数据技术化-构建用户标签,支持上层应用
通过已有数据->获取对应的信息->打上相应的标签->指导业务
How
数据获取
静态数据:用户属性-姓名 性别 年龄。。。。。 用户提供
动态数据:用户行为 下单 上课 理赔
设计指标
构建指标体系-以业务需求为导向
明确开发需求-标 ...
【SQL刷题本(三)】lag函数的使用
游戏玩法分析 IVTable: Activity
1234567891011+--------------+---------+| Column Name | Type |+--------------+---------+| player_id | int || device_id | int || event_date | date || games_played | int |+--------------+---------+(player_id,event_date)是此表的主键。这张表显示了某些游戏的玩家的活动情况。每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。
编写一个 SQL 查询,报告在首次登录的第二天再次登录的玩家的比率,四舍五入到小数点后两位。换句话说,您需要计算从首次登录日期开始至少连续两天登录的玩家的数量,然后除以玩家总数。
查询结果格式如下所示:
123456789101112131415161718Activity table:+-----------+--- ...
【SQL刷题本(二)】窗口函数
去掉最高最低薪资,求平均薪资概述123456789101112131415161718192010001 1 6011710002 2 9210210003 2 8607410004 1 6659610005 1 6696110006 2 8104610007 2 9433310008 1 7528610009 2 8599410010 1 7688410011 1 1111110012 1 9999910013 2 1111110014 2 99999薪水表中是员工薪水的基本信息,包括雇员编号,部门编号和薪水 第1行表示雇员编号为10001的员工在1号部门,薪水为60117元; 第2行表示雇员编号为10002的员工在2号部门,薪水为92102元; ... 第10行表示雇员编号为10010的员工在1号部门,薪水为76884元
需求
问题:查询每个部门除去最高、最低薪水后的平均薪水,并保留整数。
12345678910111213141516with tmp as ( ...
【数仓查漏补缺(二)】Hive原理及调优回顾
Exists优化
exists性能比in高,能用exists就不要用in
EXISTS里面的子查询,可以使用外部查询的表字段,而且必须和外部表存在关联关系,否则会报错
exists中的子查询,select * / id / 1 都一样,重点是where条件
EXISTS有了关联以后,外部的每一行数据,在子查询中查出来的结果都是不一样的
CodeDmeo使用in(效率低)1234SELECT * from sqooptohive.emp2WHERE area in (SELECT concat(province, city) from sqooptohive.emp_add_hiveWHERE name like '张%');
使用exists1234567891011121314151617SELECT * from sqooptohive.emp2WHERE EXISTS( SELECT * from sqooptohive.emp_add_hive where emp2.area=concat(province, cit ...
【数仓查漏补缺(一)】HiveSql回顾
基础语法Create语句
完整的Hive的建表语句
分区, 分桶, 切割, 存储方式, 存储位置, 表属性
1234567891011create [external] table 表名( 字段名 字段类型 Comment'字段的描述信息', 字段名 字段类型 Comment'字段的描述信息', 字段名 字段类型 Comment'字段的描述信息' -- 最后一行没有逗号)Comment '表的描述信息'partitioned by 中不存在的字段 字段类型) -- 分区clustered by (表中已有字段) sorted by (表中已有字段 desc/asc) into 桶的个数 buckets -- 分桶row format delimited fields terminated by ',' -- 切割stored as orc -- (stored as TestFile 行存储方式) orc是列存储方式location 'HD ...
【SQL刷题本(一)】SQL连接查询及子查询
组合两个表
编写一个SQL查询来报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为空 null 。以 任意顺序 返回结果表。
案例12345678910111213141516171819202122232425输入: Person表:+----------+----------+-----------+| personId | lastName | firstName |+----------+----------+-----------+| 1 | Wang | Allen || 2 | Alice | Bob |+----------+----------+-----------+Address表:+-----------+----------+---------------+------------+| addressId | personId | city | state |+-----------+--------- ...
【SparkStreaming】SparkStreaming和Kafka整合
将从Kafka中读取的binary二进制数据(DataFrame结构)转为String类型的数据, 方便后续的处理
这里有两种方式
DSL风格-传统方式
select(col("value").cast(StringType()))
DSL风格使用selec表达式替换
selectExpr("cast(value as string)")
SparkStreaming和Kafka整合
无非就是Kafka中的几个组件(生产者, 消费者, topic, partition)和Streaming进行整合
这里的重点就是理解Kafka中的原理
从Kafka中读取数据
订阅一个主题
123456df = spark \ .readStream \ .format("kafka") \ .option("kafka.bootstrap.servers", "host1:port1,host2:port2") \ .option("subscribe", ...
【SparkStreaming】初识Spark实时框架
从socket套接字中读取数据(被称为Socket Source)
12345input_df = spark \.readStream \.format("数据来源类型") \.option("host", "地址") \.load()
实时的从文件中读取数据(被称为File Source)
123456input_df = spark\ .readStream\ .format('csv')\ .option('sep', ';') \ .schema('naem string, age int, hobby string')\ .load('file:///root/streaming')
实时的将数据写出到文件中(被称为File Sink)
1234567rs_df\ .writeStream\ .outputMode('append& ...
【Spark笔耕不辍(二)】Kafka
置顶URL: https://blog.csdn.net/weixin_46244703?type=blog
消息队列什么是消息队列
消息队列MQ(Message Queue)用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存
消息队列的作用
消息队列可以实现两个模块之间的异步通信,并降低模块之间的耦合性,并可以限流削峰
由于消息队列是连接两个模块的桥梁,至关重要,因此消息队列都是采用分布式架构来保证数据的安全性和可靠性
常见的消息队列:
ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ、Pulsar
发布和订阅介绍
1、发布者又称生成者,多个生成者都可以向消息队列生成数据,为了区分不同的消息,每个消息都有主题
2、订阅者又称消费者,每个消费者可以消费或者订阅多个主题的消息
3、消费者消费完消息之后,队列中的消息并不会立刻消失
Kafka什么是KafkaKafka是基于分布式的流式处理框架,主要用于实时分析
Kafka是基于发布订阅模式的消息队列,有生产者 消费者 主题 队列等
Kafka的核心组件
Broker1231、搭建Ka ...