7
largeDataFrame (여러 열 및 수십억 개의 행)과 smallDataFrame (단일 열 및 10,000 행)이 있습니다.필터 스파크 블랙리스트 기준을 지정하는 다른 DataFrame을 기반으로하는 데이터 프레임
largeDataFrame
의 some_identifier
열이 smallDataFrame
의 행 중 하나와 일치 할 때마다 largeDataFrame
에서 모든 행을 필터링하고 싶습니다.
some_idenfitier,first_name
111,bob
123,phil
222,mary
456,sue
smallDataFrame
some_identifier
123
456
desiredOutput
111,bob
222,mary
여기 내 추한 솔루션입니다
largeDataFrame :
다음은 예입니다.
val smallDataFrame2 = smallDataFrame.withColumn("is_bad", lit("bad_row"))
val desiredOutput = largeDataFrame.join(broadcast(smallDataFrame2), Seq("some_identifier"), "left").filter($"is_bad".isNull).drop("is_bad")
클리너 솔루션이 있습니까?
을 그리고 당신이 정말로 열거 할 때 당신이 문자열을 사용하지 않는 이유이다 - 데이터 집합의 scaladoc을 :
그것은 주어진 키에 따라 왼쪽 테이블에 오른쪽 테이블에서 데이터를 필터링합니다. 참여자는 옵션으로 좌선을 언급하지 않으므로 어떤 옵션이 있는지 파악하는 것은 불가능합니다. 심층적 인 다이빙을하지 않아도됩니다. 나는 이것이 Jira를 보증하는 것처럼 느껴지기 시작했습니다 - 그리고 전에 API의 선택에 의해 오줌 누 렸습니다. –
솔직히 말해서이 답변을 작성했을 때 Dataset은 실험적이었고 여전히 큰 팬이 아닙니다. – eliasah
고맙게도 Jacek는 조인을위한 설명서 (https : //jaceklaskowski.gitbooks)가 가득 찼습니다. io/mastering-apache-spark/content/spark-sql-joins.html - 여기에 남겨두면 다른 사람의 삶이 편하게됩니다. –