2017-01-13 1 views
0

4 개의 열 A, B, C, D가있는 데이터 프레임이 있다고 가정 해 보겠습니다. 이제는 B, C, D 열 값을 Vector로 결합하여 새로운 열, 즉 E 열을 기존 데이터 프레임에 추가합니다. RDD로 변환하지 않고 RDD에 벡터 값을 추가 한 다음 다시 데이터 프레임으로 변환하지 않고 데이터 프레임 내에서 직접이 작업을 수행하려고합니다. 이것은 좋은 해결책이 아니므로.Spark Java : 다른 열의 값을 취하여 DataFrame의 새 열로 벡터 값 추가

그래서 일부 Java 솔루션에서 Dataframe API 내에서 직접 수행하기를 원합니다.

답변

0

이 시나리오 사용할 수있는 VectorAssemBler 여기 는 https://spark.apache.org/docs/2.0.2/ml-features.html#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()); 

입니다

관련 문제