Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在pyspark-2.3中使用python内置函数**abs**时出错_Python_Apache Spark_Pyspark_Pyspark Sql - Fatal编程技术网

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

在pyspark-2.3中使用python内置函数**abs**时出错,python,apache-spark,pyspark,pyspark-sql,Python,Apache Spark,Pyspark,Pyspark Sql,我试图使用pysparkshell-2.3中内置的pythonabs函数将负数转换为正数 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])

我试图使用pysparkshell-2.3中内置的pythonabs函数将负数转换为正数

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) 
你能帮帮我吗???

你不是这样用的。没有设计为在外部环境下进行评估,并在其上进行操作

您可以使用literal

from pyspark.sql.functions import abs, lit 

abs(lit(numb))
但它会给你另一个:


Python有内置的abs方法

pyspark还提供了abs方法,但这是针对DataFrame列的

若您在pyspark shell中导入pyspark方法“abs”,那个么您将重写内置的abs方法

看起来您有如下所示的覆盖abs方法:

>>> print(abs(-3))
3
>>> from pyspark.sql.functions import abs
>>> print(abs(-3))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/pyspark/sql/functions.py", line 42, in _
    jc = getattr(sc._jvm.functions, name)(col._jc if isinstance(col, Column) else col)
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/pyspark/sql/utils.py", line 63, in deco
    return f(*a, **kw)
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 332, in get_return_value
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:748)
打印(abs(-3)) 3. >>>从pyspark.sql.functions导入abs >>>印刷品(abs(-3)) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/pyspark/sql/functions.py”,第42行,在_ jc=getattr(sc.\u jvm.functions,name)(如果是instance(col,Column),则为col.\u jc,否则为col) 文件“/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py”,第1257行,在调用中__ 文件“/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/pyspark/sql/utils.py”,第63行,deco格式 返回f(*a,**kw) 文件“/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py”,第332行,在get\u返回值中 py4j.protocol.Py4JError:调用z:org.apache.spark.sql.functions.abs时出错。跟踪: py4j.Py4JException:方法abs([class java.lang.Integer])不存在 位于py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318) 位于py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:339) 在py4j.Gateway.invoke处(Gateway.java:276) 位于py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) 在py4j.commands.CallCommand.execute(CallCommand.java:79) 在py4j.GatewayConnection.run处(GatewayConnection.java:238) 运行(Thread.java:748) 我们应该避免直接导入函数名,并尝试为模块使用别名,以便能够调用我们想要的正确方法

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
>>> print(abs(-3))
3
>>> from pyspark.sql.functions import abs
>>> print(abs(-3))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/pyspark/sql/functions.py", line 42, in _
    jc = getattr(sc._jvm.functions, name)(col._jc if isinstance(col, Column) else col)
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", line 1257, in __call__
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/pyspark/sql/utils.py", line 63, in deco
    return f(*a, **kw)
  File "/Users/rs301t/spark-2.3.2-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/protocol.py", line 332, in get_return_value
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:748)