我是刚刚起步的人,在导入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'
答案 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