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