2017-09-14 2 views
1

저는 몇 시간 동안 해결하고 검색하려고 시도한 특정 질문으로 불꽃을 피우는 것을 처음 보았습니다.다른 스파크/스칼라에서 쓰루 값을 반복하여 데이터 프레임 필터링

두 개의 데이터 프레임이 있습니다. { "ANames", "description", "id"등}

하나의 열 "BName"이있는 다른 하나 (B). 그 이후로, 나는 그것을 다른 타입으로 변환해야한다는 것을 알고 있지만, 나는 (리스트, 시퀀스 ..) 무엇이 확실하지 않다. 그것은 나의 첫 번째 질문이 될 것입니다.

결국 "ANames"를 통해 B에서 각 이름 "BName"을 (필터로) 검색하려고합니다. 그리고이 이름의 하나를 발견 afterwords 경우, 구조와 다른 Dataframe에 쓰기 :

{BNAME, ID}

그것은 복잡한 소리. 그러나 실제로는 Dataframe에서 단어를 찾아야합니다.

편집 : "ANames"에는 하나 이상의 이름 (예 : [John Senna, Bred Ford])이 포함될 수 있으며, "BName"은 포함 할 수 없습니다. 그리고 나중에 "설명"에서 각 "BName"을 검색하려고합니다.

답변

0

는 "array_contains"기능 두 dataframes 조인

import sqlContext.implicits._ 

val aData = List((Array("John Senna", "Bred Ford"), "Any description", 11), (Array("NoName"), "No description", 12)) 
val bData = List("Bred Ford") 

val aDF = sparkContext.parallelize(aData).toDF("ANames", "description", "id") 
val bDF = sparkContext.parallelize(bData).toDF("BName") 

val result = bDF.join(aDF, expr("array_contains(ANames, BName)"), "inner").select(col("BName"), col("id")) 
result.show(false) 

출력 :

+---------+---+ 
|BName |id | 
+---------+---+ 
|Bred Ford|11 | 
+---------+---+ 

유사한 접근이 설명의 검색에 나중에 이용 될 수있다.

+0

고마워요. 솔기가 좋다. :) – Puca

+0

expr ("array_contains (ANames, BName)")이 작동하지 않았습니다. 나는 따옴표가 안에 있어야한다고 생각합니다 : array_contains ("ANames", "BName") 하지만 이것조차도 작동하지 않으므로 거의 각 가능성을 찾으려고 노력했습니다. 흥미로운 점이 종종 있습니다. 첫 번째 열의 경우 "aDF()"로 둘러싸면 열이 아닌 String이 필요하고 다시 제거하면 문자열이 아닌 열이 필요합니다. – Puca

+0

결국 "expr (array_contains())"을 삭제하고 두 개의 열 사이에 넣기 만하면됩니다. 적어도 20 분 이후로 오류없이 계속 실행 중입니다 .-D – Puca

관련 문제