为啥 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:列功能的类型不正确?
在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe