为什么pyspark.sql下层函数不接受文字列名和长度函数呢?

Why pyspark.sql lower function not accept literal col name and length function do?

为什么在下一个例子中 lower 函数不接受 col 名称作为文字而长度接受?

import pyspark.sql.functions as func
df = spark.createDataFrame([('Tom', 80)], ["name", "height"])
df.select (df.name, func.length('name')).show()
df.select (df.name, func.lower('name')).show()

+----+------------+
|name|length(name)|
+----+------------+
| Tom|           3|
+----+------------+

Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.lower. Trace:
py4j.Py4JException: Method lower([class java.lang.String]) does not exist
....

在文档中 pyspark.sql.length sais that accept a column as parameter and the pyspark.sql.lower 说的一样。为什么不接受'name'?

如果我换

df.select (df.name, func.lower(func.col('name'))).show()

运行 好的

+----+-----------+
|name|lower(name)|
+----+-----------+
| Tom|        tom|
+----+-----------+

谁能解释一下为什么?

提前致谢。

我遇到了同样的问题。在谷歌搜索时,我发现了这个问题:https://issues.apache.org/jira/browse/SPARK-22212.

这似乎是一个错误(小错误),解决方法似乎是您实际所做的。

希望这对您有所帮助。