Как передать постоянное значение в Python UDF?
Я думал, можно ли создатьUDF
который получает два аргументаColumn
и другая переменная (Object
,Dictionary
или любой другой тип), затем выполните некоторые операции и верните результат.
На самом деле, я пытался сделать это, но у меня есть исключение. Поэтому мне было интересно, есть ли способ избежать этой проблемы.
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()
И я получаю следующую ошибку:
AnalysisException: вы "не можете разрешить 'Bonsanto', учитывая имя входного столбца, возраст, баланс;"
Так что очевидно, чтоUDF
"видит"string
«Bonsanto» как имя столбца, и на самом деле я пытаюсь сравнить значение записи со вторым аргументом.
С другой стороны, я знаю, что можно использовать некоторые операторы внутриwhere
пункт (но на самом деле я хочу знать, достижимо ли это с помощьюUDF
), следующее:
df.where(col("name") == "Bonsanto").show()
#+--------+---+-------+
#| name|age|balance|
#+--------+---+-------+
#|Bonsanto| 20| 2000.0|
#+--------+---+-------+