【发布时间】:2016-05-24 08:23:28
【问题描述】:
我在想是否可以创建一个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: u"cannot resolve 'Bonsanto' given input columns 姓名、年龄、余额;"
所以很明显UDF“看到”string“Bonsanto”作为列名,实际上我正在尝试将记录值与第二个参数进行比较。
另一方面,我知道可以在where 子句中使用一些运算符(但实际上我想知道使用UDF 是否可以实现),如下所示:
df.where(col("name") == "Bonsanto").show()
#+--------+---+-------+
#| name|age|balance|
#+--------+---+-------+
#|Bonsanto| 20| 2000.0|
#+--------+---+-------+
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql user-defined-functions