我有一个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|
+--------------------+----------+--------------+
您有一个密集的数组列,因此使用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列并排。 列中数据类型的结构如下所示 有人可以帮助我如何提取只有演员姓名和分数列的数据。 提前致谢