Spark Java:通过从不同的列中获取值,将矢量值添加为数据帧中的新列



假设我们有 4 列 A、B、C、D 的数据框。现在我想要的是将 B,C,D 列值组合为矢量并将它们作为新列(即 E 列)添加到现有数据框中。我想直接在数据框中执行此操作,而无需将其转换为RDD,然后将向量值添加到RDD,然后将其转换回数据帧。因为这不是好的解决方案。

所以,我希望一些Java解决方案直接在Dataframe API中做到这一点。

对于此方案,您可以使用VectorAssemBler这是示例代码

import java.util.Arrays;
import org.apache.spark.ml.feature.VectorAssembler;
import org.apache.spark.ml.linalg.VectorUDT;
import org.apache.spark.ml.linalg.Vectors;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.types.*;
import static org.apache.spark.sql.types.DataTypes.*;
StructType schema = createStructType(new StructField[]{
  createStructField("id", IntegerType, false),
  createStructField("hour", IntegerType, false),
  createStructField("mobile", DoubleType, false),
  createStructField("userFeatures", new VectorUDT(), false),
  createStructField("clicked", DoubleType, false)
});
Row row = RowFactory.create(0, 18, 1.0, Vectors.dense(0.0, 10.0, 0.5), 1.0);
Dataset<Row> dataset = spark.createDataFrame(Arrays.asList(row), schema);
VectorAssembler assembler = new VectorAssembler()
  .setInputCols(new String[]{"hour", "mobile", "userFeatures"})
  .setOutputCol("features");
Dataset<Row> output = assembler.transform(dataset);
System.out.println(output.select("features", "clicked").first());

有关进一步的使用,请查看下面的此链接https://spark.apache.org/docs/2.0.2/ml-features.html#vectorassembler

希望这有效

相关内容

  • 没有找到相关文章

最新更新