apache-spark - 如何将向量列分成两列?

标签 apache-spark pyspark apache-spark-ml

我使用 PySpark。

Spark ML 的随机森林输出 DataFrame 有一列“概率”,它是一个具有两个值的向量。我只想向输出 DataFrame 添加两列“prob1”和“prob2”,它们对应于向量中的第一个和第二个值。

我尝试了以下方法:

output2 = output.withColumn('prob1', output.map(lambda r: r['probability'][0]))

但我收到“col 应该是 Column”的错误。

关于如何将一列向量转换为其值列的任何建议?

最佳答案

我想出了上面的建议的问题。在 pyspark 中,“密集向量简单地表示为 NumPy 数组对象”,因此问题在于 python 和 numpy 类型。需要添加 .item() 以将 numpy.float64 转换为 python 浮点数。

以下代码有效:

split1_udf = udf(lambda value: value[0].item(), FloatType())
split2_udf = udf(lambda value: value[1].item(), FloatType())

output2 = randomforestoutput.select(split1_udf('probability').alias('c1'), split2_udf('probability').alias('c2'))

或者将这些列附加到原始数据帧:
randomforestoutput.withColumn('c1', split1_udf('probability')).withColumn('c2', split2_udf('probability'))

关于apache-spark - 如何将向量列分成两列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37311688/

相关文章:

apache-spark - 如果Spark中的数据帧是不可变的,为什么我们可以使用withColumn()之类的操作对其进行修改?

amazon-s3 - 在 S3 上以 Parquet 格式保存 >>25T SchemaRDD

hadoop - 无法查看 yarn 资源管理器的日志

apache-spark - 如何在多列上编写 Pyspark UDAF?

python - pyspark 聚合,同时找到组的第一个值

apache-spark - 如何加载逻辑回归模型?

apache-spark - 星火 ML : Taking square root of feature columns

apache-spark - 如何更改pyspark中的列元数据?

amazon-web-services - 无法在新的 AWS EMR 集群中获取 SparkContext

java - 将 Spring 与 Spark 一起使用