类型错误:类型列没有定义 __round__ 方法

Cof*_*Liu 1 apache-spark-sql pyspark

我的数据如下所示:

+-------+-------+------+----------+
|book_id|user_id|rating|prediction|
+-------+-------+------+----------+
|    148|    588|     4|  3.953999|
|    148|  28767|     3| 2.5816362|
|    148|  41282|     3|  4.185532|
|    148|  18313|     4| 3.6297297|
|    148|  11272|     3| 3.0962112|
+-------+-------+------+----------+
Run Code Online (Sandbox Code Playgroud)

我想通过四舍五入预测列中的值来创建一个新的列名“pred_class”。我运行这个代码:

results.withColumn('pred_class',round(results['prediction']))
Run Code Online (Sandbox Code Playgroud)

它给了我这样的错误:

类型错误:类型列没有定义圆形方法

任何人都可以帮助我吗?谢谢!

Psi*_*dom 5

您在未正确定义round的 spark Column对象上使用来自 base python的函数。改用roundfrom 函数pyspark.sql.functions

results = spark.createDataFrame([{'book_id': 148, 'user_id': 588, 'rating': 4, 'prediction': 3.953999}])

from pyspark.sql.functions import round   # import the method here
results.withColumn('pred_class',round(results['prediction'])).show()

+-------+----------+------+-------+----------+
|book_id|prediction|rating|user_id|pred_class|
+-------+----------+------+-------+----------+
|    148|  3.953999|     4|    588|       4.0|
+-------+----------+------+-------+----------+
Run Code Online (Sandbox Code Playgroud)