【发布时间】:2020-12-23 20:24:17
【问题描述】:
我对 spark 比较陌生,在导入 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'
【问题讨论】:
-
我认为你需要在使用这个函数之前初始化一个火花上下文。在错误 'NoneType' 对象没有属性 '_jvm' ==> sc is NoneType ==> SparkContext 不存在。第一种情况有效,因为它仍然使用本机轮函数,如果要使用 pyspark 函数,则必须调用 pyspark.sql.functions.round(3.14159265359,2)
-
但就是这样,我不想使用 pyspark 圆形功能。如果我执行“from pyspark.sql.functions import *”,就好像 pyspark 正在重载 round() 函数...?
-
@MGriggs “好像 pyspark 正在重载 round() 函数...?” 正是它在做什么。您还期望
import *怎么工作?请阅读why isimport *bad?。