[SCALA] 어떻게 ML 알고리즘에 대한 DataFrame 열을 벡터화?
SCALA어떻게 ML 알고리즘에 대한 DataFrame 열을 벡터화?
(| URL | 브라우저 예컨대 UUID) 몇 가지 범주 문자열 값으로 DataFrame 있습니다.
나는 이중 행렬을 받아 ML 알고리즘을 실행하기 위해 이중으로 변환하는 것입니다.
나는이 같은 기능을 정의 있도록 convertion 방법으로는 내가 두 번 값으로 내 문자열 값을 매핑 StringIndexer (스파크 1.4)를 사용 :
def str(arg: String, df:DataFrame) : DataFrame =
(
val indexer = new StringIndexer().setInputCol(arg).setOutputCol(arg+"_index")
val newDF = indexer.fit(df).transform(df)
return newDF
)
이제 문제는 내가하는 DF의 foreach는 열을 반복하는이 함수를 호출하고 결과가 될 수 있도록, 구문 분석을 두 번 열에서 원래 문자열 열을 추가 (또는 변환) 것입니다 :
초기 DF :
[String: uuid|String: url| String: browser]
최종 DF :
[String: uuid|Double: uuid_index|String: url|Double: url_index|String: browser|Double: Browser_index]
미리 감사드립니다
해결법
-
==============================
1.당신은 단순히 열 배열을 통해 foldLeft 수 있습니다 :
당신은 단순히 열 배열을 통해 foldLeft 수 있습니다 :
val transformed: DataFrame = df.columns.foldLeft(df)((df, arg) => str(arg, df))
그럼에도 불구하고, 나는 그것이 좋은 방법이 아니라고 주장한다. SRC 폐기는 사용할 수 없습니다 StringIndexerModel 때문에 당신은 새로운 데이터를 얻을 때. 그 때문에 나는 파이프 라인을 사용하는 것이 좋습니다 것입니다 :
import org.apache.spark.ml.Pipeline val transformers: Array[org.apache.spark.ml.PipelineStage] = df.columns.map( cname => new StringIndexer() .setInputCol(cname) .setOutputCol(s"${cname}_index") ) // Add the rest of your pipeline like VectorAssembler and algorithm val stages: Array[org.apache.spark.ml.PipelineStage] = transformers ++ ??? val pipeline = new Pipeline().setStages(stages) val model = pipeline.fit(df) model.transform(df)
VectorAssembler는 다음과 같이 포함 할 수있다 :
val assembler = new VectorAssembler() .setInputCols(df.columns.map(cname => s"${cname}_index")) .setOutputCol("features") val stages = transformers :+ assembler
당신은 또한 더 적은 사용자 정의 할 수 있습니다,하지만 훨씬 더 간결 RFormula을 사용할 수 있습니다 :
import org.apache.spark.ml.feature.RFormula val rf = new RFormula().setFormula(" ~ uuid + url + browser - 1") val rfModel = rf.fit(dataset) rfModel.transform(dataset)
from https://stackoverflow.com/questions/32357226/how-to-vectorize-dataframe-columns-for-ml-algorithms by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] Scalaz 귀속 [서열] typeclass (0) | 2019.11.17 |
---|---|
[SCALA] 스칼라에서 자바 람다를 사용하는 방법 (0) | 2019.11.17 |
[SCALA] 선물은 프로그램 종료 전에 실행되지 않습니다 (0) | 2019.11.17 |
[SCALA] 스칼라 - 발스의 초기화 순서 (0) | 2019.11.17 |
[SCALA] 스칼라 내부 클래스 유형을 참조 (0) | 2019.11.17 |