pyspark 的 Python 轮函数问题

Mar*_*ggs 8 python rounding pyspark

我对 spark 比较陌生,当我在导入 pyspark 函数后尝试使用 python 的内置 round() 函数时遇到了一个问题。这似乎与我如何导入 pyspark 函数有关,但我不确定有什么区别或为什么一种方式会导致问题而另一种方式不会。

预期行为:

import pyspark.sql.functions
print(round(3.14159265359,2))
>>> 3.14
Run Code Online (Sandbox Code Playgroud)

意外行为:

from pyspark.sql.functions import *
print(round(3.14159265359,2))
>>> ERROR

AttributeError                            Traceback (most recent call last)
<ipython-input-1-50155ca4fa82> in <module>()
      1 from pyspark.sql.functions import *
----> 2 print(round(3.1454848383,2))

/opt/spark/python/pyspark/sql/functions.py in round(col, scale)
    503     """
    504     sc = SparkContext._active_spark_context
--> 505     return Column(sc._jvm.functions.round(_to_java_column(col), scale))
    506 
    507 

AttributeError: 'NoneType' object has no attribute '_jvm'
Run Code Online (Sandbox Code Playgroud)

may*_*wal 7

导入import pyspark.sql.functions as F以避免冲突。

这样就可以正常使用所有的python内置函数了,当你想使用pyspark函数时,把它们作为 F.round


Nut*_*uts 5

不要执行 import * ,因为它会弄乱您的命名空间。

Pyspark 具有圆形功能:http ://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html#pyspark.sql.functions.round

所以内置函数round被替换为pyspark.sql.functions.round