【问题标题】:Get range of Dataframe Row获取数据框行的范围
【发布时间】:2017-09-05 10:40:41
【问题描述】:

所以我从 parquet 文件中加载了一个数据框。此数据框现在包含未指定数量的列。第一列是标签,下面是特征。

我想将数据框中的每一行保存为 LabeledPoint。

目前我在想:

val labeledPoints: RDD[LabeledPoint] =df.map{row => LabeledPoint(row.getInt(0),Vectors.dense(row.getDouble(1),row.getDouble(2)))}

获取列索引很容易,但是在处理大量列时,这将不成立。我希望能够将从索引 1 开始的整行(因为索引 0 是标签)加载到密集向量中。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    这应该可以解决问题

    df.map {
      row: Row => 
        val data = for (index <- 1 until row.length) yield row.getDouble(index)
        val vector = new DenseVector(data.toArray)
        new LabeledPoint(row.getInt(0), vector)
    }
    

    【讨论】:

    • 这很好用,我只需将“val vector = new DenseVector(data.toArray)”编辑为:“val vector=Vectors.dense(data.toArray)”谢谢!
    • 很高兴听到它解决了您的问题 :-) 顺便说一句:您需要进行哪些更改才能使其正常工作?
    • 没什么,现在想想。我只是没有导入 DenseVector xS。所以我使用 Vectors.dense 而不是新的 DenseVector。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2020-03-09
    • 1970-01-01
    • 2018-08-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多