当前位置: 首页 > 知识库问答 >
问题:

Pyspark:从密集向量列中获取新列中每行的最大预测值

江育
2023-03-14

我有一个pyspark数据框架,在这个数据框架上,我对多类数据应用了随机分类器模型(来自py spark . ml . classification import RandomForestClassifier)。

现在,我有预测和概率列(密集向量列)。我想要一个新列中的单个最高概率,它来自与预测相对应的可用概率列。你能告诉我一条路吗?

--------------------+----------+--------------+
|         probability|prediction|predictedLabel|
+--------------------+----------+--------------+
|[0.04980166062108...|       9.0|          73.0|
|[0.09709955311030...|       2.0|          92.0|
|[0.00206441341895...|       1.0|          97.0|
|[0.01177280567423...|       8.0|          26.0|
|[0.09170364155771...|       4.0|          78.0|
|[0.09332145486133...|       0.0|          95.0|
|[0.15873541380236...|       0.0|          95.0|
|[0.21929050786626...|       0.0|          95.0|
|[0.08840100103254...|       1.0|          97.0|
|[0.06204585465363...|       1.0|          97.0|
|[0.06961837644280...|       1.0|          97.0|
|[0.04529447218955...|       1.0|          97.0|
|[0.02129073891494...|       2.0|          92.0|
|[0.02692350960234...|       1.0|          97.0|
|[0.02676868258573...|       8.0|          26.0|
|[0.01849528482881...|       1.0|          97.0|
|[0.10405735702064...|       1.0|          97.0|
|[0.01636762299564...|       1.0|          97.0|
|[0.01739759717529...|       1.0|          97.0|
|[0.02129073891494...|       2.0|          92.0|
+--------------------+----------+--------------+

共有1个答案

翟俊远
2023-03-14

您有一个密集的数组列,因此使用array_max(来自pyspark.sql.functions.array_ max)更有意义。

示例(使用留档)

from pyspark.sql.functions import array_max
df = spark.createDataFrame([([0.04, 0.03, 0.01],), ([0.09, 0.05, 0.09],)], ['probability'])
df = df.withColumn("max_prob",array_max(df.probability))
df.show()

更新:你可以在数组max之前使用vector_to_array()吗,比如

from pyspark.sql.functions import array_max
from pyspark.ml.functions import vector_to_array
df = df.withColumn("max_prob",array_max(vector_to_array(df.probability)))

这应该给你

+------------------+--------+
|       probability|max_prob|
+------------------+--------+
|[0.04, 0.03, 0.01]|    0.04|
|[0.09, 0.05, 0.09]|    0.09|
+------------------+--------+
 类似资料:
  • 问题内容: 我在pyspark中使用sqlContext.sql函数读取了一个数据框。它包含4个数字列,每个客户都有信息(这是键ID)。我需要计算每个客户端的最大值并将此值加入数据框: 在这种情况下,客户端“ six”的最大值为23,而客户端“ ten”的最大值为30。“ null”在新列中自然为null。 请帮助我显示如何执行此操作。 问题答案: 我认为将值组合到列表中而不是找到最大值将是最简单

  • 我在DataFrame中有一列字符串,其中包含逗号分隔的数字。我需要从字符串中提取每一行的最大值。返回的最大值应该是从开始到第13个索引的最大值。 我尝试用','作为分隔符来拆分刺,将其转换为启用扩展选项的列表。然后我用Pandas的赋值方法来求垂直轴上的最大值。 使用我的代码获得的结果:

  • 问题内容: 因此,我有一个包含几个列表的列表,这些列表都首先包含三个字符串,然后是一个浮点数,例如: 如何制作一个返回最大值的函数(此处为9.1931)?我试过了 但这只是给我一个清单。 编辑:此外,以任何方式我可以获取值来自何处的索引?喜欢,来自哪个子列表? 问题答案: 循环浏览外部列表,然后选择每个子列表的最后一个元素: 最好将所有与函数相关的变量保留在范围内(将列表作为参数传递,并且不要通过

  • 我有一个DenseVectors作为行的dataframe: 我想用UDF找到每一行的最大值。我就是这么做的: 文件“C:\programdata\anaconda3\envs\python2\lib\site-packages\pyspark\sql\utils.py”,第63行,deco格式返回f(*a,**kw) 文件“C:\programdata\anaconda3\envs\python

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行

  • 我已经生成了<code>pyspark.sql.dataframe。DataFrame带有列名称cast和score。 但是,我想在cast列中保留唯一的名字,而不是与它们相关联的id,与_score列并排。 列中数据类型的结构如下所示 有人可以帮助我如何提取只有演员姓名和分数列的数据。 提前致谢