我在PySpark(ML包)中训练了一个LogisticRegression模型,并且预测结果是一个PySpark DataFrame(
cv_predictions
)(参见[1])。probability
列(参见[2])是一个vector
类型(参见[3])。[1]
type(cv_predictions_prod)
pyspark.sql.dataframe.DataFrame
[2]
cv_predictions_prod.select('probability').show(10, False)
+----------------------------------------+
|probability |
+----------------------------------------+
|[0.31559134817066054,0.6844086518293395]|
|[0.8937864350711228,0.10621356492887715]|
|[0.8615878905395029,0.1384121094604972] |
|[0.9594427633777901,0.04055723662220989]|
|[0.5391547673698157,0.46084523263018434]|
|[0.2820729747752462,0.7179270252247538] |
|[0.7730465873083118,0.22695341269168817]|
|[0.6346585276598942,0.3653414723401058] |
|[0.6346585276598942,0.3653414723401058] |
|[0.637279255218404,0.362720744781596] |
+----------------------------------------+
only showing top 10 rows
[3]
cv_predictions_prod.printSchema()
root
...
|-- rawPrediction: vector (nullable = true)
|-- probability: vector (nullable = true)
|-- prediction: double (nullable = true)
我该如何解析PySpark DataFrame的vector
,以便创建一个新列,仅提取每个probability
向量的第一个元素?
这个问题类似于下面的问题,但是链接中的解决方案对我来说不起作用/不清楚:
VectorUDT
没有表示为ArrayType
。 - zero323DataFrame
与 Python 对象相差甚远,它不使用 NumPy 在后台运行,除非您明确将其转换为 Python RDD(由 udf 使用的批处理 Python eval),而VectorUDT
不是本地 SQL 类型,因此它不提供与ArrayType
等相同的功能。 - zero323