Estoy tratando de hacer sentido de donde usted necesita utilizar un lit valor, que se define como un literal column en la documentación.

Tomemos por ejemplo este udf, que devuelve el índice de un SQL columna de la matriz:

def find_index(column, index):
    return column[index]

Si me fuera a pasar un entero en esto me gustaría conseguir un error. Yo tendría que pasar un lit(n) valor en el archivo udf para obtener el índice correcto de una matriz.

Hay un lugar donde puedo aprender mejor las reglas duras y rápidas de cuando usar lit y posiblemente col así?

InformationsquelleAutor flybonzai | 2016-06-09

2 Comentarios

  1. 26

    Lo simple, usted necesita un Column (puede ser creado usando lit pero no es la única opción) cuando la JVM contraparte espera una columna y no hay conversión interna en un wrapper) de Python o usted wan para llamar a un Column método específico.

    En el primer caso, la única regla estricta es la que se aplica a la Udf. UDF (Python o JVM) puede ser llamada sólo con argumentos que son de Column tipo. Normalmente también se aplica a las funciones de pyspark.sql.functions. En otros casos, siempre es mejor revisar la documentación y documentos de la cadena de primicias y si no es suficiente docs de un correspondiente Scala contraparte.

    En el segundo caso las reglas son simples. Si por ejemplo se desea comparar una columna a un valor, el valor en el lado derecho:

    col("foo") > 0  # OK

    o valor tiene que estar envuelto con literal:

    lit(0) < col("foo")  # OK

    Puede utilizar no objeto de columna en el lado izquierdo:

    0 < col("foo") 

    pero esto sólo se aplica a Python y no funciona en la Scala. Por supuesto, esto se aplica a otros operadores (==, <=, &, |, etc.)

    No hace falta decir que usted tiene que utilizar lit si desea acceder a cualquiera de los pyspark.sql.La columna métodos el tratamiento estándar de Python escalar como una constante de la columna. Por ejemplo, usted necesita

    c = lit(1)

    no

    c = 1

    a

    c.between(0, 3)  # type: pyspark.sql.Column

    • Sé que esto es en contra de LO «protocolo», pero sólo quería decir gracias por cómo muchas buenas respuestas que ha dado la Chispa de la comunidad. En muchas maneras la documentación se siente incompleta o fragmentada, por lo que tener una fuente de expertos es un regalo del cielo.
    • Protocolo o no gracias.
  2. 0

    ejemplo sencillo podría ser:

    df.withColumn("columnName", lit(Column_Value ))

    ex:

    df = df.withColumn("Today's Date", lit(datetime.now()))

    Pero primero biblioteca de importación:
    de pyspark.sql.funciones de importación iluminado

Dejar respuesta

Please enter your comment!
Please enter your name here