[SCALA] 계산 코사인 유사성 스파크 Dataframe
SCALA계산 코사인 유사성 스파크 Dataframe
나는 Dataframe 행 사이의 코사인 유사도를 계산하는 불꽃 스칼라를 사용하고 있습니다.
Dataframe 형식은 아래에
root
|-- SKU: double (nullable = true)
|-- Features: vector (nullable = true)
아래 dataframe의 샘플
+-------+--------------------+
| SKU| Features|
+-------+--------------------+
| 9970.0|[4.7143,0.0,5.785...|
|19676.0|[5.5,0.0,6.4286,4...|
| 3296.0|[4.7143,1.4286,6....|
|13658.0|[6.2857,0.7143,4....|
| 1.0|[4.2308,0.7692,5....|
| 513.0|[3.0,0.0,4.9091,5...|
| 3753.0|[5.9231,0.0,4.846...|
|14967.0|[4.5833,0.8333,5....|
| 2803.0|[4.2308,0.0,4.846...|
|11879.0|[3.1429,0.0,4.5,4...|
+-------+--------------------+
내가 DataFrames을 통해 파이썬 코사인 유사성 행렬을 전치 다음과 같은 언급 links.Apache 스파크를 확인하려고 계산 코사인 유사성별로 featurizing을-(가) - 텍스트로 - 벡터-TF-IDF를 사용하지만 생각이있는 더 나은 솔루션
나는 샘플 코드 아래를 시도하고있다
val irm = new IndexedRowMatrix(inClusters.rdd.map {
case (v,i:Vector) => IndexedRow(v, i)
}).toCoordinateMatrix.transpose.toRowMatrix.columnSimilarities
하지만 오류가 아래에있어
Error:(80, 12) constructor cannot be instantiated to expected type;
found : (T1, T2)
required: org.apache.spark.sql.Row
case (v,i:Vector) => IndexedRow(v, i)
나는 다음과 같은 링크 아파치 불꽃을 확인 : 어떻게 DataFrame에서 매트릭스를 만드는 방법? 하지만 스칼라를 사용 할 수 없습니다
해결법
-
==============================
1.
import org.apache.spark.sql.Row val irm = new IndexedRowMatrix(inClusters.rdd.map { Row(_, v: org.apache.spark.ml.linalg.Vector) => org.apache.spark.mllib.linalg.Vectors.fromML(v) }.zipWithIndex.map { case (v, i) => IndexedRow(i, v) })
from https://stackoverflow.com/questions/47010126/calculate-cosine-similarity-spark-dataframe by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 선물 / 성공 경주 (0) | 2020.01.24 |
---|---|
[SCALA] 익명 함수를 정의하기 위해 밑줄을 결정할 수있는 규칙은 무엇입니까? (0) | 2020.01.15 |
[SCALA] 어떻게 스칼라에서 문자열 "+"연산자를 unimport하는? (0) | 2020.01.11 |
[SCALA] 어떻게 스파크에서 여러 열로 배열을 폭발 (0) | 2020.01.09 |
[SCALA] Chisel3 모듈에서 Verilog를 생성하는 방법의 간단한 예를 들어 있나요? (0) | 2020.01.09 |