如何直接从 DataFrame 创建 LablePoint 而无需对数据帧的每一列索引进行硬编码?

Posted

技术标签:

【中文标题】如何直接从 DataFrame 创建 LablePoint 而无需对数据帧的每一列索引进行硬编码?【英文标题】:How to create LablePoint from DataFrame directly without hardcoding the each column index of the dataframe? 【发布时间】:2017-07-10 06:37:15 【问题描述】:

我有 100 列的十进制数据类型的数据框(inputDF)。我想使用 dataframe(inputDF) 创建 LabelPoint。

我可以通过硬编码数据框的每一列索引来创建 LablePoint,这不是最佳解决方案。

val outputLabelPoint = inputDF.map(x => new LabeledPoint(0.0, Vectors.dense(x.getAs[Double](0),x.getAs[Double](1),x.getAs[Double](2),x.getAs[Double](3), ...))

如何直接从DataFrame创建LablePoint,而不用硬编码dataframe的每一列索引?

我们将不胜感激。

【问题讨论】:

【参考方案1】:

VectorAssembler 可能是您想要找到的变压器。

VectorAssembler 是将给定的列列表组合成单个向量列的转换器。

标识 |小时 |移动 |用户特征 |点击 ----|--------|--------|------|--------- 0 | 18 | 1.0 | [0.0, 10.0, 0.5] | 1.0

之后

标识 |小时 |移动 |用户特征 |点击 |特点 ----|--------|--------|------|---------| ----------------------------------------- 0 | 18 | 1.0 | [0.0, 10.0, 0.5] | 1.0 | [18.0, 1.0, 0.0, 10.0, 0.5]

我很困惑为什么这两个表格不能正确显示。

有关详细信息,请参阅Spark Doc 中的示例。

如果您需要更多帮助,请描述您的列名及其生成方式。

【讨论】:

感谢您的快速回复。你能详细解释一下吗? 我在 MLlib(Spark 1.6.1)中使用 RandomForestModel。我有 100 多个特征作为输入数据框中的列,例如 userId|feature1|feature2|feature3|feature4|feature5|feature6|.. 除了 userId 列,其他列是数字(十进制)。 model.predict 方法以LabeledPoint 为输入,LabeledPoint 有两部分,一个是标签,另一个是特征。所以我需要从输入数据帧中准备 LabeledPoint,它可以输入到 model.predict 方法中。帮助将不胜感激。

以上是关于如何直接从 DataFrame 创建 LablePoint 而无需对数据帧的每一列索引进行硬编码?的主要内容,如果未能解决你的问题,请参考以下文章

如何从带有向量列的 DataFrame 创建张量流数据集?

如何从 Python 循环创建 PySpark DataFrame

如何从 GeoPandas DataFrame 创建 shapefile?

如何从带有列表的嵌套 Json 创建 pandas DataFrame

Python:如何从列表中的字典创建 DataFrame 列 [重复]

如何使用 Pandas 从 DataFrame 或 np.array 中的列条目创建字典