Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

como fazer slice na coluna com SPARK

gostaria de saber como eu faço slice em strig como uma feita em um bootcamp de imersão da Alura, mas feito no Spark. a coluna contem R$ 300.000/mês

consegui separar o cifrão mas não o restante que vem depois, ou seja, o /mês

from pyspark.sql.functions import split,col df=df.withColumn("moeda", split(col("Valor"), " ").getItem(0)).withColumn("ValorImovel", split(col("Valor"), " ").getItem(1))

Desde já agradeço!

1 resposta
solução!

Oi Tabata,

A função split também aceita expressões regulares então podemos passar mais de um caractere de separação em uma única chamada. Seria assim:

# Instalando o pyspark
!pip install pyspark
# Iniciando a SparkSession
from pyspark.sql import SparkSession

spark = SparkSession.builder.getOrCreate()

Considerando o seguinte DataFrame de exemplo:

data = [('R$ 300.000/mês',), ('R$ 1.200.000.000/mês',)]
colName = ['Valor']
df = spark.createDataFrame(data, colName)
df.show()
Valor
R$ 300.000/mês
R$ 1.200.000.000/mês

Precisamos passar para a função split uma expressão regular que identifique os espaços em branco e o caractere /. Então podemos construir a expressão da seguinte forma: "\s|/".

Onde,

  • \s - representa os espaços em branco
  • | - seria o operador pipe que funciona como o operador lógico OU
  • / - o caractere /

O caractere | (pipe) representa uma ocorrência OU a outra, ou seja, espaço em branco OU o caractere /.

from pyspark.sql.functions import split, col

df.withColumn("Valor", split(col("Valor"), "\s|/")).show(truncate=False)
Valor
[R$, 300.000, mês]
[R$, 1.200.000.000, mês]

Utilizando o getItem(1) obtemos apenas os valores.

df = df.withColumn("Valor", split(col("Valor"), "\s|/").getItem(1))
df.show(truncate=False)
Valor
300.000
1.200.000.000

Espero ter ajudado