如何直接从 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 而无需对数据帧的每一列索引进行硬编码?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python 循环创建 PySpark DataFrame
如何从 GeoPandas DataFrame 创建 shapefile?
如何从带有列表的嵌套 Json 创建 pandas DataFrame