Partições Hive – Sellkart Case Study-Usando dados estrategicamente
Publicados: 2015-08-14O Sellkart é o principal site de comércio eletrônico indiano e loja de varejo e, como qualquer outro site de comércio eletrônico, precisa armazenar dados do usuário e inventário de todos os itens que vende. Ele usa o banco de dados MySQL, que é uma das principais opções de armazenamento de dados. MySQL é um armazenamento de dados seguro, seguro e confiável. Mas à medida que o Sellkart crescia, mais e mais clientes começaram a mergulhar neste portal de comércio eletrônico. Agora Sellkart, coleta dados do usuário como sua localização, seu comportamento, registros demográficos, itens comprados e itens devolvidos, sua opção de pagamento, como COD, cartão de crédito/débito. Os analistas usam esses dados para prever o valor do cliente, melhores opções de pagamento e expandir os negócios usando melhores campanhas publicitárias, facilitando os processos.
Para descrever como os dados coletados podem ser usados estrategicamente, consideraremos aqui um conjunto de dados falso de consumidores que consiste em nomes de usuário, cidade, ocupação, número total. de itens comprados e número total. de itens devolvidos devido a defeitos.
Aqui no dataset falso (data.csv), temos os dados dos clientes que compraram mais de 25 itens.
Campos no data.csv
- Nome de usuário (cadeia)
- Cidade (String)
- Ocupação (String)
- Comprado (Inteiro)
- Retornado (Inteiro)
A Sellkart usa esses dados, que possuem várias colunas e um conjunto de dados consideravelmente grande de mais de vários gigabytes, para prever e entender os principais insights de seu sistema, como:
- Valor vitalício do cliente
- Sucesso do produto
- Compra demográfica de um produto
- Regiões de interesse
- Precificação de produtos em tempo real
- Up sell engajando clientes
Agora vamos mostrar como uma análise de pequeno intervalo ocorre no Hadoop. Coisas que descobriremos usando os dados:
a) Encontrar o principal consumidor com base na quantidade de produto que comprou.
Usos: Dê privilégios especiais aos melhores compradores, fazendo upselling para clientes médios.
b) Encontrar o setor de trabalho que mais compra produtos.
Usos: manter mais produtos da gama mais vendida, recomendação de produtos similares.
c) Encontrar as cidades onde se compra a maioria dos produtos.
Usos: Segmentação de compradores por região, concentrando-se em áreas onde há menos clientes, experimentando novos produtos em um bom mercado.
1. Copiar os dados para HDFS.
a) Faça o diretório no hadoop HDFS
[training@localhost ~]$ hadoop fs -mkdir /user/training/case1
[training@localhost ~]$ hadoop fs -ls
Found 3 items
drwxr-xr-x - training supergroup 0 2015-07-21 16:48 /user/training/case1
-rw-r--r-- 1 training supergroup 44009445 2015-07-20 12:39 /user/training/crime
drwxr-xr-x - training supergroup 0 2015-07-20 14:21 /user/training/csvfile
b) Copiando o arquivo para uso posterior
[training@localhost ~]$ hadoop fs -copyFromLocal ~/Desktop/case1/data.csv /user/training/case1
[training@localhost ~]$ hadoop fs -ls /user/training/case1
Found 1 items
-rw-r--r-- 1 training supergroup 2489638 2015-07-21 16:49 /user/training/case1/data.csv
Depois que esse arquivo é copiado, ele é processado usando o Hive, para obter resultados diferentes.
2. Usando o hive para processar os dados.
a) Criação de tabela no hive, que será utilizada para armazenar esses dados.
[training@localhost ~]$ hive
creatHive history file=/tmp/training/hive_job_log_training_201507211652_319213433.txt
hive> create table shopping (username string,city string,occupation string,purchaseditem,int,returneditem int) row format delimited fields
terminated by ',' stored as textfile
OK
Time taken: 2.892 seconds
hive> show tables;
OK
crimes
shopping
Time taken: 0.171 seconds
b) Carregar arquivo em compras de tabelas de colmeia
Hive>load data inpath '/user/training/case1/data.csv' overwrite into table shopping;
Loading data to table default.shopping
Deleted hdfs://localhost/user/hive/warehouse/shopping
OK
Time taken: 2.798 seconds
c) Conhecer os insights da tabela.
colmeia> descrever compras formatadas;
OK
# col_name data_type comentário nome de usuário string Nenhum cidade string Nenhum cadeia de ocupação Nenhum item comprado int Nenhum returnitem int Nenhum # Informações detalhadas da tabela Banco de dados: padrão Proprietário: treinamento CreateTime: Ter, 21 de julho 16:56:38 IST 2015 LastAccessTime: DESCONHECIDO Modo de proteção: Nenhum Retenção: 0 Localização: hdfs://localhost/user/hive/warehouse/shopping Tipo de tabela: MANAGED_TABLE Parâmetros da tabela: transient_lastDdlTime 1437478210 # Informações de armazenamento Biblioteca SerDe: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Comprimido: Não Número de buckets: -1 Colunas do intervalo: [] Classificar Colunas: [] Parâmetros de descrição de armazenamento: campo.delim , serialização.formato , Tempo gasto: 0,302 segundos
3. Agora precisamos ver como esses dados podem ser usados.
a) Encontrar pessoas que são os melhores clientes para lhes oferecer mais descontos. Primeiro, encontraremos qual é a maior quantidade pedida, depois corresponderemos essa quantidade a todos os registros e encontraremos os principais clientes.
hive> select * from shopping limit 5;
OK
Seattle Podiatric doctor 187 5
Detroit Lakes Engineering and natural sciences manager 168 11
Jackson Map editor 187 17
Miami Clinical manager 193 5
Santa Fe Springs Radiographer 207 20
Time taken: 0.335 seconds
hive> select max(purchaseditem) from shopping;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks determined at compile time: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201507212155_0001, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507212155_0001
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507212155_0001
2015-07-21 23:16:01,887 Stage-1 map = 0%, reduce = 0%
2015-07-21 23:16:06,988 Stage-1 map = 100%, reduce = 0%
2015-07-21 23:16:16,075 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201507212155_0001
OK
250
Time taken: 18.794 seconds
hive> select * from shopping where purchaseditem = 250;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201507212155_0002, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507212155_0002
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507212155_0002
2015-07-21 23:18:31,586 Stage-1 map = 0%, reduce = 0%
2015-07-21 23:18:33,598 Stage-1 map = 100%, reduce = 0%
2015-07-21 23:18:34,608 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201507212155_0002
OK
Ablay1993 Seattle Ergonomist 250 7
Ablent71 Sugar Land Professional property manager 250 10
Affew1942 Alquippa Human resources consultant 250 13
Agar1976 Bell Oak Zookeeper 250 5
Akeem Manchester Marine 250 11
Alat1954 Columbus Assembler 250 7
Albertha Baton Rouge Mixing and blending machine operator 250 21
Amelia.Skiles Westfield Mediator 250 0
Amir_Spencer Polk City Epidemiologist 250 11
Angel.Thiel Hamilton Keying machine operator 250 21
Annalise_Langosh East Northport Fitness director 250 24
E assim por diante a lista continua, agora a empresa pode encontrar os principais clientes, esta etapa pode ser realizada facilmente no MySQL, mas somente quando os dados são muito pequenos quando os dados estão em gigabits o Hadoop entra para salvar o dia.
b) Agora o analista pode descobrir qual setor de trabalho é seu melhor cliente, ou seja, analisar os empregos das pessoas que mais compram, de modo a aumentar os produtos desse setor.
hive> select distinct occupation from shopping where purchaseditem = 250;;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks not specified. Estimated from input data size: 1
In order to change the average load for a reducer (in bytes):
set hive.exec.reducers.bytes.per.reducer=
In order to limit the maximum number of reducers:
set hive.exec.reducers.max=
In order to set a constant number of reducers:
set mapred.reduce.tasks=
Starting Job = job_201507220045_0006, Tracking URL = http://localhost:50030/jobdetails.jsp?jobid=job_201507220045_0006
Kill Command = /usr/lib/hadoop/bin/hadoop job -Dmapred.job.tracker=localhost:8021 -kill job_201507220045_0006
2015-07-22 01:09:52,904 Stage-1 map = 0%, reduce = 0%
2015-07-22 01:09:54,914 Stage-1 map = 100%, reduce = 0%
2015-07-22 01:10:01,968 Stage-1 map = 100%, reduce = 100%
Ended Job = job_201507220045_0006
OK
Account clerk
Accounting clerk
Actuarie
Administrative assistant.
E assim por diante.
Agora, sabendo que um balconista é um dos principais setores de trabalho do qual as pessoas estão comprando coisas, eles podem aumentar as vendas nesse departamento.
4. Usando o Porco
Agora usaremos o pig para realizar algumas outras funções, como coletar os grupos de nomes de usuários de determinada cidade, e essas cidades são as principais consumidoras.
a) Carregue os dados em porco
grunt> fulldata = load '/user/training/case1/' using PigStorage(',') as
(username:chararray,city:chararray,occupation:chararray, purchaseditem:int,returneditem:int);
grunt>dump fulldata;(username:chararray,city:chararray,occupation:chararray, purchaseditem:int,returneditem:int);
grunt>dump fulldata;
b) Agora vamos agrupar os nomes de usuários dos principais consumidores de acordo com as cidades.
Para segregar registros dos principais consumidores
Hive>top = filter fulldata by purchaseditem==250;
Agrupando as principais cidades consumidoras agora, para obter os nomes de usuário como uma coleção.
Os dados são agrupados, mas não ordenados.
Então precisamos fazer o pedido agora.
Assim, os dados finais são ordenados.
Agora podemos usar esses dados. Da mesma forma podemos extrair as cidades com menos consumidores, nessas cidades a empresa pode definir mais orçamento para as campanhas publicitárias e publicitárias para que mais pessoas interajam com o portal.
E para as cidades e consumidores onde há alto índice de consumo, a empresa pode lançar novos produtos e ampliar seu círculo.
Se você tiver dúvidas ou perguntas, mencione-as na caixa de comentários abaixo.