Entonces, quiero crear una nueva columna en mi marco de datos, cuyas filas dependen de los valores de dos columnas, y también implica una condición.

Intenté esto, pero no funciona.

some_value = ...
df = df.withColumn("new_col", col("col1") if col("col2") == some_value else None)

¿Cuál es la forma correcta de hacer esto?

-2
MetallicPriest 29 abr. 2020 a las 20:15

3 respuestas

La mejor respuesta

Puede usar la función when.

newval='10002'
df2 = df.withColumn("new_col", when((col("col1") == lit(newval)), "col1").otherwise(None))
df2.show()
1
Piyush Patel 29 abr. 2020 a las 17:38

Un ejemplo trivial usando con expr, también puede usar when:

val df3 = df2.withColumn("new_col", expr("case when c1 = 1 and c2 = 101 then c1 + c2 else 999 end"))
1
thebluephantom 29 abr. 2020 a las 17:33

Esto funcionó para mí

 new_col_expr = when(col("col2").eqNullSafe(some_value), col("col1")).otherwise(None)
 df = df.withColumn("new_col", new_col_expr)
0
MetallicPriest 29 abr. 2020 a las 17:34