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

Posted

技术标签:

【中文标题】为啥 pyspark.sql 下层函数不接受文字列名和长度函数呢?【英文标题】:Why pyspark.sql lower function not accept literal col name and length function do?为什么 pyspark.sql 下层函数不接受文字列名和长度函数呢? 【发布时间】:2019-11-18 09:43:22 【问题描述】:

为什么在下一个示例中,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()

+----+------------+ |名称|长度(名称)| +----+------------+ |汤姆| 3| +----+------------+ Py4JError:调用 z:org.apache.spark.sql.functions.lower 时出错。痕迹: py4j.Py4JException:方法lower([class java.lang.String])不存在 ……

在文档pyspark.sql.lengthsais 中接受列作为参数,pyspark.sql.lowersais 相同。为什么不接受“姓名”?

如果我换了

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

运行正常

+----+------------+ |姓名|下级(姓名)| +----+------------+ |汤姆|汤姆| +----+------------+

谁能解释一下为什么?

提前致谢。

【问题讨论】:

【参考方案1】:

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

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

希望这会有所帮助。

【讨论】:

请直接将相关代码发布到您的答案中,而不是发布链接。这将有助于 OP 和其他人。

以上是关于为啥 pyspark.sql 下层函数不接受文字列名和长度函数呢?的主要内容,如果未能解决你的问题,请参考以下文章

如何修复:pyspark.sql.utils.IllegalArgumentException:列功能的类型不正确?

为啥 Postgres 不接受我的计数列?

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe

excel在一列前加相同的文字为啥前一列的文字会被覆盖

Pyspark/SQL:添加一个标志列,如左半连接

为啥 pyspark sql 不能正确计算 group by 子句?