【问题标题】:How to create LablePoint from DataFrame directly without hardcoding the each column index of the dataframe?如何直接从 DataFrame 创建 LablePoint 而无需对数据帧的每一列索引进行硬编码?
【发布时间】: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的每一列索引?

我们将不胜感激。

【问题讨论】:

    标签: scala apache-spark spark-dataframe apache-spark-mllib


    【解决方案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 方法中。帮助将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    相关资源
    最近更新 更多