<jupyter_start><jupyter_text>--- Estudos com PySpark--- Criado por: **<NAME>** Data de criação: 02.07.2021--- Objetivo:Avançar com os estudos utilizando as técnicas que utilizo no dia-a-dia, entretanto com o Spark e python;--- Data da última atualização: 03.07.2021---  1. Instalando a biblioteca pyspark---<jupyter_code># ------------------------------------
# Instalando a biblioteca pyspark
# No terminal:
# ------------
# pip install pyspark
# -----------------<jupyter_output><empty_output><jupyter_text>2. Importando as bibliotecas necessárias---<jupyter_code># ------------------------------------
# Importanto as bibliotecas
# -----------------
from pyspark.sql import SparkSession
#----------
from pyspark.sql.functions import col, skewness, kurtosis # Para assimetria e Curtose
#----------
import numpy as np # Importanto Numpy
#----------
import matplotlib.pyplot as plt # Importanto Numpy
#----------
import seaborn as sns # Importando Seaborn
# -----------------<jupyter_output><empty_output><jupyter_text>--- 2.1 Iniciando uma sessão do SPARK---<jupyter_code># ------------------------------------
# Iniciando uma sessão do Spark
# ----
# obs:
# appName: Nome do app para a sessão
# -----------------
spark = SparkSession \
        .builder \
        .appName("Estudos com Spark - <NAME>") \
        .config("spark.some.config.option", "some-value") \
        .getOrCreate()
# -----------------<jupyter_output><empty_output><jupyter_text>--- 2.2 Criando um banco de dados dentro do python---<jupyter_code>## ------------------------------------
## Criando um banco de dados dentro do python
## ----
## dimensão: 4 colunas e 3 linhas;
## -----------------
#df = spark.sparkContext\
#        .parallelize([(1, 2, 3, 'a b c'),
#                      (4, 5, 6, 'd e f'),
#                      (7, 8, 9, 'g h i')])\
#        .toDF(['col1', 'col2', 'col3','col4'])
## -----------------<jupyter_output><empty_output><jupyter_text>--- 2.3 Lendo um arquivo com extensão 'Parquet'---  Base de dados : "userdata"* Informações sobre a Base de dados:    * Possui 5.000 linhas;    * Possui 13 variáveis:        1.		registration_dttm |	timestamp        2.		id 		|	int        3.		first_name 	|	string        4.		last_name 	|	string        5.		email 		|	string        6.		gender 		|	string        7.		ip_address 	|	string        8.		cc 		|	string        9.		country 	|	string        10.		birthdate 	|	string        11.		salary 		|	double        12.		title 		|	string        13.		comments 	|	string ---<jupyter_code># ------------------------------------
# Ler dados com extensão Parquet
# ----
# localização da base de dados:
# ../banco de dados - exemplo/userdata/
# ----
# Número de linhas: 5000
# -----------------
dados = spark.read.parquet("../banco de dados - exemplo/userdata/")
# -----------------
# ------------------------------------
# Verificando a quantidade de linhas
# -----------------
dados.count()
# -----------------
# ------------------------------------
# Verificando as colunas
# -----------------
dados.printSchema()
# -----------------
# ------------------------------------
# Mostrando as 20 linhas da variável
# "first_name"
# -----------------
dados.select("first_name").show()
# -----------------
dados.show(2,True)<jupyter_output>+-------------------+---+----------+---------+----------------+------+--------------+----------------+---------+---------+---------+----------------+--------+
|  registration_dttm| id|first_name|last_name|           email|gender|    ip_address|              cc|  country|birthdate|   salary|           title|comments|
+-------------------+---+----------+---------+----------------+------+--------------+----------------+---------+---------+---------+----------------+--------+
|2016-02-03 04:55:29|  1|    Amanda|   Jordan|<EMAIL>|Female|   172.16.17.32|6759521864920116|Indonesia| 3/8/1971| 49756.53|Internal Auditor|   1E+02|
|2016-02-03 14:04:03|  2|    Albert|  Freeman| <EMAIL>|  Male|172.16.17.32|                |   Canada|1/16/1968|150280.17|   Accountant IV|        |
+-------------------+---+----------+---------+----------------+------+--------------+----------------+---------+---------+---------+----------------+--------+
only showing top 2 rows<jupyter_text>--- 3 Análise Exploratória - Descritiva---<jupyter_code># ------------------------------------
# Selecionando as colunas para análise
# A única variável do banco que é numérica é 
# salary"
# -----------------
colunas_selecionadas = ["salary"]
# ------
dados.select(colunas_selecionadas).describe().show()
# ------------------------------------
# Assimetria e Curtose
# -----------------
colunas_selecionadas = "salary"
# ------
dados.select(skewness(colunas_selecionadas),kurtosis(colunas_selecionadas)).show()
# ------<jupyter_output>+--------------------+-------------------+
|    skewness(salary)|   kurtosis(salary)|
+--------------------+-------------------+
|-0.01515158775612...|-1.1670881267541617|
+--------------------+-------------------+<jupyter_text>3.1 Fazendo um Histograma---<jupyter_code># ------------------------------------
# Gerando um histograma
# -----------------
colunas_selecionadas = "salary"
# ------
plot_data = dados.select(colunas_selecionadas).toPandas()
x = plot_data[colunas_selecionadas]
bins = np.arange(0, 287000, 25000.0)
# ------
hist, bin_edges = np.histogram(x,bins,weights=np.zeros_like(x) + 100. / x.size) # make the histogram
# -----
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(1, 1, 1)
#-----
# Plot the histogram heights against integers on the x axis
ax.bar(range(len(hist)),hist,width=1,alpha=0.8,ec ='black',color = 'gold')
#-----
# Set the ticks to the middle of the bars
ax.set_xticks([0.5+i for i,j in enumerate(hist)])
#-----
# Set the xticklabels to a string that tells us what the bin edges were
labels =['{}'.format(bins[i+1]) for i,j in enumerate(hist)]
labels.insert(0,'0')
#-----
plt.xlabel(colunas_selecionadas)
plt.ylabel('percentage')
plt.show()<jupyter_output><empty_output><jupyter_text>3.2 Fazendo um BoxPlot---<jupyter_code># ------------------------------------
# Gerando um BoxPlot
# -----------------
colunas_selecionadas = "salary"
# ------
x = dados.select(colunas_selecionadas).toPandas()
#-----
fig = plt.figure(figsize=(20, 8))
#-----
ax = fig.add_subplot(1, 2, 1)
ax = sns.boxplot(data=x)
ax = fig.add_subplot(1, 2, 2)
ax = sns.violinplot(data=x)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.33849522915689034, 'fraction_numerical': 0.037697481620522444, 'mean_word_length': 1.5163321526957891, 'pattern_counts': {'":': 0, '<': 35, '<?xml version=': 0, '>': 35, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 2, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '8', 'dir': 'jupyter-structured-clean-dedup', 'id': '263776', 'license': 'MIT', 'n_tokens_mistral': 2262, 'n_tokens_neox': 2053, 'n_words': 443, 'path': 'PySpark/.ipynb_checkpoints/Estudo com PySpark + Parquet-checkpoint.ipynb', 'repo_name': 'Jodavid/Estudos-com-Spark---pyhton-e-R', 'size': '6431'}