Como passar um valor constante para o Python UDF?
Eu estava pensando se era possível criar umUDF
que recebe dois argumentos porColumn
e outra variável (Object
,Dictionary
, ou qualquer outro tipo), faça algumas operações e retorne o resultado.
Na verdade, tentei fazer isso, mas tive uma exceção. Portanto, eu queria saber se havia alguma maneira de evitar esse problema.
df = sqlContext.createDataFrame([("Bonsanto", 20, 2000.00),
("Hayek", 60, 3000.00),
("Mises", 60, 1000.0)],
["name", "age", "balance"])
comparatorUDF = udf(lambda c, n: c == n, BooleanType())
df.where(comparatorUDF(col("name"), "Bonsanto")).show()
E eu recebo o seguinte erro:
AnalysisException: u "não pode resolver o nome da coluna de entrada 'Bonsanto', idade, saldo;"
Portanto, é óbvio que oUDF
"vê" ostring
"Bonsanto" como um nome de coluna e, na verdade, estou tentando comparar um valor de registro com o segundo argumento.
Por outro lado, eu sei que é possível usar alguns operadores dentro de umwhere
cláusula (mas na verdade eu quero saber se é possível usando umUDF
), do seguinte modo:
df.where(col("name") == "Bonsanto").show()
#+--------+---+-------+
#| name|age|balance|
#+--------+---+-------+
#|Bonsanto| 20| 2000.0|
#+--------+---+-------+