# Copel - Treinamento de BigData
###### tags: `copel`
## 1. Acesse o JupyterHub
Acesse o link http://pdt05.copel.nt:30080 para entrar no JupyterHub do ambiente lab.
## 2. Abrir o terminal
Abaixo temos duas imagens mostrando como pode iniciar um novo terminal.


## 3. Autenticar o usuário
Digite o comando abaixo no terminal.
```bash=
kinit <seu-usuario>
# Por exemplo, meu usuário é robertogyn19
$ kinit robertogyn19
Password for robertogyn19@ADALGISO.NIVALDO:
# O comando klist pode ser utilizado para verificar se deu tudo certo
klist
Ticket cache: FILE:/tmp/krb5cc_1000
Default principal: robertogyn19@ADALGISO.NIVALDO
Valid starting Expires Service principal
11/28/2020 17:59:19 11/29/2020 03:59:19 krbtgt/ADALGISO.NIVALDO@ADALGISO.NIVALDO
renew until 12/05/2020 17:58:45
```

## 4. Notebook
Execute o comando abaixo no terminal para copiar o notebook que está no HDFS.
```bash=
hdfs dfs -copyToLocal /treinamento/pecld/PeCLD.ipynb .
```
Depois de copiar o arquivo, abra-o clicando duas vezes no arquivo.

## 5. Trechos de código
### 5.1 Iniciar spark
```python=
spark = SparkSession. \
builder. \
master('local[4]'). \
config('spark.executor.memory', '8g'). \
config('spark.driver.memory', '8g'). \
getOrCreate()
spark.conf.set("spark.sql.repl.eagerEval.enabled", True)
```
### 5.2 Leitura do arquivo cad-uc-fatura
```python=
spark.read.parquet('/data/pecld/cad-uc-fatura')
```
### 5.3 Filtro 1 - cláusula 2
```python=
clause2 = (df.DTA_VENC_EUF >= F.date_sub(F.current_date(), 1095)) & (
df.COD_SITU_COM_EUF.isin(['AR', 'RN', 'AA']))
```
### 5.4 Filtro 2 - cláusula 3
```python=
clause3 = df.COD_ORIG_FAT_EUF.isin(['FAT', 'SOM', 'EVE', 'PAC', 'PAR', 'DSC', 'FRC'])
```
### 5.5 Filtro completo - clause 1, 2 e 3
```python=
df = df.filter((clause1 | clause2) & clause3)
```
### 5.6 Coluna STA_JUDIC_EUF
```python=
df = df.withColumn('STA_JUDIC_EUF', F.when(df.STA_JUDIC_EUF == 'S', 1).otherwise(0))
```
### 5.7 Coluna IND_BXRD_FAT
```python=
baixa_renda_clause = (df.COD_ROTI_BXRD_EUF.isNotNull()) & (df.COD_CRIT_BXRD_EUF.isNotNull())
df = df.withColumn('IND_BXRD_FAT', F.when(baixa_renda_clause, 1).otherwise(0))
```
### 5.8 Coluna DIAS_PGTO - trunc(dta_pgto_euf)
```python=
dta_pgto_trunc = F.date_trunc('day', df.DTA_PGTO_EUF)
```
### 5.9 Coluna DIAS_PGTO - dias_pgto_inner_1
```python=
dias_pgto_c1_inner = F.when(dta_pgto_trunc < dta_venc_trunc, 0).otherwise(F.datediff(dta_pgto_trunc, dta_venc_trunc))
```
### 5.10 Coluna DIAS_PGTO - dias_pgto_inner_2
```python=
dias_pgto_c2_inner = F.when(dta_venc_trunc > current_trunc, 0).otherwise(F.datediff(current_trunc, dta_venc_trunc))
```
### 5.11 Coluna DIAS_PGTO - dias_pgto_c2
```python=
dias_pgto_c2 = df.COD_SITU_COM_EUF.isin(['AB', 'DA', 'AG'])
```
### 5.12 código de escrita
```python=
df.write.parquet("/treinamento/output/roberto/faturas.parquet", mode="overwrite")
```