Acabo de empezar a usar databricks/pyspark. Estoy usando python/spark 2.1. He subido los datos a una tabla. Esta tabla es una columna completa de las cadenas. Deseo solicitar una asignación de función a cada elemento de la columna. Me carga la tabla en un dataframe:

df = spark.table("mynewtable")

La única manera que podía ver era a los demás diciendo que iba a convertir a RDD para aplicar la función de asignación y, a continuación, volver a dataframe para mostrar los datos. Pero este lanza trabajo abortado falla de fase:

df2 = df.select("_c0").rdd.flatMap(lambda x: x.append("anything")).toDF()

Todo lo que quiero hacer es aplicar cualquier tipo de función de mapa para mis datos en la tabla.
Por ejemplo anexar algo de cada una cadena en la columna, o realizar una división en un char, y, a continuación, poner eso en un dataframe así que puedo .show() o mostrarlo.

InformationsquelleAutor yahalom | 2017-07-30

1 Comentario

  1. 18

    Usted no puede:

    • Uso flatMap porque va a aplanar la Row
    • Usted puede utilizar append porque:

      • tuple o Row no tienen ningún método append
      • append (si está presente en la colección) es ejecutado por los efectos secundarios y devuelve None

    Me gustaría utilizar withColumn:

    df.withColumn("foo", lit("anything"))

    pero map debería funcionar así:

    df.select("_c0").rdd.flatMap(lambda x: x + ("anything", )).toDF()

    Editar (dado el comentario):

    Usted probablemente querrá un udf

    from pyspark.sql.functions import udf
    
    def iplookup(s):
        return ... # Some lookup logic
    
    iplookup_udf = udf(iplookup)
    
    df.withColumn("foo", iplookup_udf("c0"))

    Predeterminado tipo de retorno es StringType, así que si quieres algo más se debe ajustar.

Dejar respuesta

Please enter your comment!
Please enter your name here