[SCALA] 스파크 벡터 열에 첨부 메타
SCALA스파크 벡터 열에 첨부 메타
문맥: 라벨 및 기능 : 저는 두 열 데이터 프레임을 가지고있다.
org.apache.spark.sql.DataFrame = [label: int, features: vector]
어디를 특징으로 VectorAssembler를 사용하여 구축 숫자 유형의 mllib.linalg.VectorUDT입니다.
의문: 특징 벡터에 스키마를 지정할 수있는 방법이 있습니까? 나는 각 기능의 이름을 추적하고자합니다.
지금까지 시도 :
val defaultAttr = NumericAttribute.defaultAttr
val attrs = Array("feat1", "feat2", "feat3").map(defaultAttr.withName)
val attrGroup = new AttributeGroup("userFeatures", attrs.asInstanceOf[Array[Attribute]])
scala> attrGroup.toMetadata
res197: org.apache.spark.sql.types.Metadata = {"ml_attr":{"attrs":{"numeric":[{"idx":0,"name":"f1"},{"idx":1,"name":"f2"},{"idx":2,"name":"f3"}]},"num_attrs":3}}
그러나 반드시 기존 데이터 프레임에이를 적용하는 방법이 아니었다.
해결법
-
==============================
1.이 적어도 두 가지 옵션 :
이 적어도 두 가지 옵션 :
벡터 열이 상위 항목을 설명 VectorAssembler 칼럼 메타 데이터를 이용하여 생성 된 경우 이미 부착되어야한다.
import org.apache.spark.ml.feature.VectorAssembler val raw = sc.parallelize(Seq( (1, 1.0, 2.0, 3.0) )).toDF("id", "feat1", "feat2", "feat3") val assembler = new VectorAssembler() .setInputCols(Array("feat1", "feat2", "feat3")) .setOutputCol("features") val dfWithMeta = assembler.transform(raw).select($"id", $"features") dfWithMeta.schema.fields(1).metadata // org.apache.spark.sql.types.Metadata = {"ml_attr":{"attrs":{"numeric":[ // {"idx":0,"name":"feat1"},{"idx":1,"name":"feat2"}, // {"idx":2,"name":"feat3"}]},"num_attrs":3}
벡터 필드는 도트 구문 (같은 $ features.feat1)하지만 VectorSlicer 같은 전문 도구에서 사용 수를 사용하여 직접 액세스 할 수 없습니다 :
import org.apache.spark.ml.feature.VectorSlicer val slicer = new VectorSlicer() .setInputCol("features") .setOutputCol("featuresSubset") .setNames(Array("feat1", "feat3")) slicer.transform(dfWithMeta).show // +---+-------------+--------------+ // | id| features|featuresSubset| // +---+-------------+--------------+ // | 1|[1.0,2.0,3.0]| [1.0,3.0]| // +---+-------------+--------------+
PySpark를 들어 내가 용액에 사용하기 위해 DataFrame의 범주 기능으로 열을 선언 할 수 있습니다 방법을 참조하십시오
from https://stackoverflow.com/questions/35305154/attach-metadata-to-vector-column-in-spark by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라가 예기치 않게 확장 기능에 대한 확인 유형 수없는 (0) | 2019.11.22 |
---|---|
[SCALA] 어떻게 생성자 인자를 확인하고 예외를 던지거나 스칼라의 기본 생성자에서 주장을 만들려면? (0) | 2019.11.21 |
[SCALA] 스칼라 - 케이스 클래스를 사용하여 없음 TypeTag 가능한 예외 TypeTag을 얻기 위해 시도? (0) | 2019.11.21 |
[SCALA] 왜 스칼라는 재귀 함수의 반환 형식을 필요로 하는가? (0) | 2019.11.21 |
[SCALA] 스파크 2.X와 스칼라 2.12를 사용하여 (0) | 2019.11.21 |