작은 데이터 프레임을 다른 큰 데이터 프레임의 UDF 내부에서 사용될 브로드 캐스트 조회 테이블로 변환하고 싶습니다. 이 작은 dataframe (myLookupDf는) 다음과 무언가 같이 보일 수 있습니다 :Spark Dataframe에서 2D 룩업 테이블을 작성하십시오.
+---+---+---+---+
| x | 90|100|101|
+---+---+---+---+
| 90| 1| 0| 0|
|100| 0| 1| 1|
|101| 0| 1| 1|
+---+---+---+---+
내가 첫 번째 키와 첫 번째 열을 사용하려면 1 개, 두 번째 키와 첫 번째 행을 말한다. x1과 x2는 같은 요소를 가지고 있습니다. 이상적으로, 룩업 테이블 (myLookupMap)는 스칼라지도 할 (또는 유사)와 같이 작동합니다 :의 배열입니다
val myLookupMap = myLookupDf.collect().map(r => Map(myLookupDf.columns.zip(r.toSeq):_*))
myLookupMap: Array[scala.collection.Map[String,Any]] = Array(Map(x -> 90, 90 -> 1, 100 -> 0, 101 -> 0), Map(x -> 100, 90 -> 0, 100 -> 1, 101 -> 1), Map(x -> 101, 90 -> 0, 100 -> 1, 101 -> 1))
을 :
myLookupMap(90)(90) returns 1
myLookupMap(90)(101) returns 0
myLookupMap(100)(90) returns 0
myLookupMap(101)(100) return 1
etc.
는 지금까지 내가 가지고 관리 정확히 무엇이 필요한지도가 아니라지도. 어떤 제안이라도 대단히 감사합니다.
왜 당신은지도에 dataframe를 변환하는? 그리고 어떻게 방송 된 df를 다른 df에 사용하고 싶습니까? –
룩업 테이블은 UDF에서 사용되므로 데이터 프레임 일 수 없습니다. 이 접근법은 두 개의 데이터 프레임에 대한 데카르트 조인을 피하기 위해 사용됩니다. – Jonathan
나는 당신의 설명에서 이해 한 것에 따라 아래에 대답했다. 나는 대답이 도움이되기를 바란다. –