No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Aprende todo un fin de semana sin pagar una suscripci贸n 馃敟

Reg铆strate

Comienza en:

6D
4H
13M
25S

UDF

21/25
Recursos

Aportes 4

Preguntas 2

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

En mi caso como cargue deportistaError usando directamente el csv de la siguiente manera:

DeportistaError_schema = StructType([
    StructField("deportista_id", StringType(), False),
    StructField("nombre", StringType(), False),
    StructField("genero", StringType(), False),
    StructField("edad", StringType(), False),
    StructField("altura", StringType(), False), 
    StructField("peso", StringType(), False),
    StructField("equipo_id", StringType(), False)
])

DeportistaErrorDF = sqlContext.read.format("csv").\
            option("header", True).\
            schema(DeportistaError_schema).\
            load(path+"deportistaError.csv")

Entonces, me salian las alturas faltantes como 鈥渘ull鈥 por lo que modifique la funcion udf para que en vez de poner None, me ponga un 0. Tambien agregue una function que converte el valor a tipo flotante.

def conversionEnteros(valor):
    return int(valor) if valor else 0

def conversionFlotante(valor):
    return float(valor) if valor else 0.0

conversionEnteros_udf = udf(lambda z: conversionEnteros(z), IntegerType())
sqlContext.udf.register("conversionEnteros_udf", conversionEnteros_udf)

conversionFlotante_udf = udf(lambda z: conversionFlotante(z), FloatType())
sqlContext.udf.register("conversionFlotante_udf", conversionFlotante_udf)

DeportistaErrorDF.select(conversionEnteros_udf("altura").alias("alturaUDF"),\
                        conversionFlotante_udf("peso").alias("pesoUDF")).show(10)
+---------+-------+
|alturaUDF|pesoUDF|
+---------+-------+
|      180|   80.0|
|      170|   60.0|
|        0|    0.0|
|        0|    0.0|
|      185|   82.0|
|      188|   75.0|
|      183|   72.0|
|      168|    0.0|
|      186|   96.0|
|        0|    0.0|
+---------+-------+

interesante

Hice un udf para cambiar el genero del atleta de 1 y 2 a MALE y FEMALE.

from pyspark.sql.functions import udf
#CREO MI FUNCI脫N PERSONALIZADA
def select_gen(s):
    return "MALE" if s == 1 else "FEMALE" 

#LA VUELVO UN UDF PARA USARLA CON DATAFRAMES Y LA REGISTRO PARA USARLA COMO SQL
select_gen_udf = udf(select_gen,StringType())
spark.udf.register("select_gen_udf",select_gen_udf)

deportista_error_df.select("nombre",select_gen_udf("genero").alias("Genero")).show(5)

spark.sql("SELECT nombre,select_gen_udf(genero) AS GENERO FROM deportista_error").show(5)

No utilic茅 la parte de lambda del profesor, ya que basandome en este url v铆 que no lo usaba. 驴Algui茅n sabe cu谩l es la diferencia de hacerlo con el lambda?

Alguien me puede explicar porque en la funci贸n lambda le pasa el par谩metro IntegerType, siendo que ya la funci贸n conversionEnteros el return es un entero.