我试图通过使用 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/