python - 在 pyspark-2.3 中使用 python 内置函数 **abs** 时出错

标签 python apache-spark pyspark apache-spark-sql

我试图通过使用 pyspark shell-2.3 中的 python 内置 abs 函数将负数转换为正数。

numb = -2
print(abs(numb))

它给我带来了一个奇怪的错误:

py4j.protocol.Py4JError: An error occurred while calling z:org.apache.spark.sql.functions.abs. Trace:
**py4j.Py4JException: Method abs([class java.lang.Integer]) does not exist
    at**
py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:339)
    at py4j.Gateway.invoke(Gateway.java:276)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:238)
    at java.lang.Thread.run(Thread.java:745) 

你能帮我吗?

最佳答案

这不是你使用 pyspark.sql.functions 的方式。没有设计用于外部评估DataFrame上下文,并在 Columns 上进行操作.

您可以使用文字Column:

from pyspark.sql.functions import abs, lit 

abs(lit(numb))

但它会给你另一个 Column :

Column<b'abs(-2)'>

理论上这些对象can be evaluated locally ,它不适合公众使用。

如果你想对纯 Python 数字进行操作,只需坚持 Python's built-in abs .

如果您已经对内置函数进行了阴影处理,则可以将注释中的函数表达为:

def math_result(current_val, value): 
    result = ((value - current_val) / value)  *100 
    return __builtins__.abs(__builtins__.round(result, 2)) 

math_result(1, 3)                                            
## 66.67

关于python - 在 pyspark-2.3 中使用 python 内置函数 **abs** 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272036/

相关文章:

Python 2.6,% 在这种情况下是什么意思?

apache-spark - 如何使用pyspark在group by之后捕获单词的频率

python - 在 Pyspark 中连接多个 csv 时添加路径位置列

python - 从 PySpark 中的两个数据帧计算值

pyspark - Databricks 中的 StreamingQuery 增量表 - 描述历史

python - 从另一个模块中定义的函数更改模块中的全局变量

python - 如何使用scrapy获取匹配的行号

python - Django中的项目名称与应用程序名称

python - Pyspark - 循环遍历 structType 和 ArrayType 在 structfield 中进行类型转换

python-2.7 - 如何为 pyspark 中的 s3 指定服务器端加密?