为什么代码有问题?我已连接到群集

时间:2019-09-23 04:56:46

标签: pyspark

我试图应用UDF函数对这些pct进行四舍五入,也许有更好的方法,我愿意接受它,因为我是pyspark的新手。 当我删除udf函数放弃舍入数字时,它起作用了,因此我对数据框充满信心。

所以,天才,请帮助我,爱与和平

我尝试在数据块中使用spqrk.sql来获取此数据帧,并且看起来不错。

以下是代码:

from pyspark.sql.types import IntegerType

round_func = udf(lambda x:round(x,2), IntegerType())

q2_res = q2_res.withColumn('pct_DISREGARD', round_func(col('pct')))

display(q2_res)
  

错误:   AttributeError:“ NoneType”对象没有属性“ _jvm”

1 个答案:

答案 0 :(得分:0)

显然,我们不能将pyspark.sql.functions中的任何一个用于udf。在this线程中给出了详细的解释。您正在尝试使用round函数,因此它不起作用,因为它仅适用于列。我们可以更简单地实现相同的功能:

from pyspark.sql.types import IntegerType
import pyspark.sql.functions as f

q2_res = q2_res.withColumn('pct_DISREGARD', f.round('pct', 2).astype(IntegerType()))

通常建议尽量避免使用UDF,因为它们非常慢。