pyspark的Python回合函数问题

时间:2018-09-28 14:44:13

标签: python pyspark rounding

我是刚刚起步的人,在导入pyspark函数之后尝试使用python的内置round()函数时遇到了一个问题。似乎与我如何导入pyspark函数有关,但是我不确定有什么区别,或者为什么一种方式会导致问题而另一种方式不会。

预期行为:

import pyspark.sql.functions
print(round(3.14159265359,2))
>>> 3.14

异常行为:

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'

4 个答案:

答案 0 :(得分:3)

请勿导入*,因为它会弄乱您的命名空间。

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

因此内置函数with dag: d1 = DummyOperator(task_id='kick_off_dag') for i in range(0, 5): d2 = DummyOperator(task_id='generate_data_{0}'.format(i)) d1 >> d2 round取代

答案 1 :(得分:3)

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

通过这种方式,您可以正常使用所有python内置函数,并且当您要使用pyspark函数时,请将其用作F.round

答案 2 :(得分:1)

如果您有很长的代码使用pyspark.sql.functions,而没有像F这样的引用。那么,要专门使用python round,您可以在 builtins .round()中使用pyspark代码。 @michael_west几乎是正确的,但该模块应为 builtins ,而不是 builtin 。示例代码:

从内置导入轮

k =圆(123.456)

答案 3 :(得分:0)

这里也有同样的问题,我不想给 pyspark.sql.functions 取别名,所以就在这里给圆取别名。

from pyspark.sql.functions import round as sqlround