Marco de datos de Pyspark: asigna strings a números

En este artículo, vamos a ver cómo convertir strings de mapas a números.

Creando dataframe para demostración:

Aquí estamos creando una fila de datos para los nombres de las universidades y luego pasamos el método createdataframe() y luego mostramos el marco de datos.

Python3

# importing module
import pyspark
 
# importing sparksession from pyspark.sql module and Row module
from pyspark.sql import SparkSession,Row
 
# creating sparksession and giving an app name
spark = SparkSession.builder.appName('sparkdf').getOrCreate()
 
# list  of college data
dataframe = spark.createDataFrame([Row("vignan"),
                                   Row("rvrjc"),
                                   Row("klu"),
                                   Row("rvrjc"),
                                   Row("klu"),
                                   Row("vignan"),
                                   Row("iit")],
                                  ["college"])
 
# display dataframe
dataframe.show()

Producción:

Método 1: Usar la función map()

Aquí creamos una función para convertir una string en numérico a través de una expresión lambda

Sintaxis: dataframe.select(“string_column_name”).rdd.map(lambda x: string_to_numeric(x[0])).map(lambda x: Row(x)).toDF([“numeric_column_name”]).show()

dónde,

  • el marco de datos es el marco de datos pyspark
  • string_column_name es la columna real que se asignará a numeric_column_name
  • string_to_numerices la función utilizada para tomar datos numéricos
  • la expresión lambda es llamar a la función de modo que se devuelva un valor numérico

Aquí vamos a crear un marco de datos de chispa de la universidad usando el método Fila y luego vamos a mapear el valor numérico usando la función lambda y renombraremos el nombre de la universidad como college_number. Para eso, vamos a crear una función y verificar la condición y devolver el valor numérico 1 si la universidad es IIT, devolver el valor numérico 2 si la universidad es vignan, devolver el valor numérico 3 si la universidad es rvrjc, devolver el valor numérico 4 si la universidad es otra que por encima de tres

Python3

# function that converts string to numeric
def string_to_numeric(x):
   
      # return numeric value 1 if college is iit
    if(x == 'iit'):
       return 1
    elif(x == "vignan"):
       
    # return numeric value 2 if college is vignan
       return 2
    elif(x == "rvrjc"):
   
      # return numeric value 3 if college is rvrjc
       return 3
    else:
       
    # return numeric value 4 if college
    # is other than above three
       return 4
 
# map the  numeric value by using lambda
# function and rename college name as college_number
dataframe.select("college").
rdd.map(lambda x: string_to_numeric(x[0])).
map(lambda x: Row(x)).toDF(["college_number"]).show()

Producción:

Método 2: Usando el método withColumn().

Aquí estamos usando el método withColumn() para seleccionar las columnas.

Sintaxis: dataframe.withColumn(“string_columna”, when(col(“columna”)==’valor’, 1)).de lo contrario(valor))

Dónde

  • el marco de datos es el marco de datos pyspark
  • string_column es la columna que se asignará a numérico
  • valor es el valor numérico

Ejemplo: Aquí vamos a crear un marco de datos de chispa de la universidad usando el método Fila y mapear el nombre de la universidad con el número de la universidad usando el método de columna junto con when().

Python3

# import col and when modules
from pyspark.sql.functions import col, when
 
# map college name with college number
# using with column method along with when module
dataframe.withColumn("college_number",
                     when(col("college")=='iit', 1)
                     .when(col("college")=='vignan', 2)
                     .when(col("college")=='rvrjc', 3)
                     .otherwise(4)).show()

Producción:

Publicación traducida automáticamente

Artículo escrito por sravankumar8128 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *