Pyspark 轮函数未按预期工作

Posted

技术标签:

【中文标题】Pyspark 轮函数未按预期工作【英文标题】:Pyspark round function not working as expected 【发布时间】:2020-07-01 01:43:34 【问题描述】:

我已经使用 MulticlassClassificationEvaluator 模块计算了朴素贝叶斯模型的准确度,我正在尝试将其四舍五入到小数点后 2 位。以下是相同的代码:

    print("Naive Bayes accuracy is: " + str(round(rf_accuracy,2)))

但我面临以下问题:


TypeError Traceback(最近一次调用最后一次) 在 () ----> 1 print("朴素贝叶斯精度为:" + str(round(rf_accuracy,2)))

1 帧 /usr/local/lib/python3.6/dist-packages/pyspark/sql/column.py 在 _to_java_column(col) 54 "0 类型为 1。" 55 "对于列文字,使用'lit'、'array'、'struct'或'create_map'" ---> 56 "函数".format(col, type(col))) 57 返回 jcol 58

TypeError:参数无效,不是字符串或列: 类型的 93.15707620528771。对于列字面量,请使用“lit”、“array”、“struct”或“create_map”函数。

我在 google 上搜索了很多,并浏览了 pyspark 函数和示例,但没有运气。不知道我错过了什么。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果 rfaccuracy 是你的数据框的列名,那么你必须这样做

import pyspark.sql.functions aa f
df.select(f.round('rfaccuracy')).show()

【讨论】:

它不是一个列,它是一个这样计算的变量: evaluator = MulticlassClassificationEvaluator(labelCol = "label", predictionCol = "prediction", metricName = "accuracy") rf_accuracy = evaluator.evaluate(predictions) *100 什么是类型(rf_accuracy) rf_accuracy 是一个浮点数 是的..但不确定出了什么问题...我尝试通过硬编码精度值(随机浮点数)..即使这样我也面临同样的问题。跨度> 试试这个打印 ('accuracy is :0.2f'.format(rf_accuracy))

以上是关于Pyspark 轮函数未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

使用广播应用地图转换时,pyspark Udf 未按预期工作?

从 pyspark agg 函数到 int

Pyspark:将UDF的结果迭代地写回数据框不会产生预期的结果

将 udf 调用移动到新函数后的 azure pyspark udf 属性 nonetype

$() 函数未按预期工作

Pyspark:spark-submit 不像 CLI 那样工作