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 “null” 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|
+---------+-------+
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?