익명 사용자
로그인하지 않음
토론
기여
계정 만들기
로그인
IT 위키
검색
아파치 스파크 RDD flatMap
편집하기
IT 위키
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
편집
원본 편집
역사
경고:
로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다.
로그인
하거나
계정을 생성하면
편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.
스팸 방지 검사입니다. 이것을 입력하지
마세요
!
Apache Spark의 flatMap 연산은 RDD의 각 요소를 변환하여 0개 이상의 요소를 포함하는 새로운 RDD를 생성하는 변환 연산이다. 일반적인 [[아파치 스파크 RDD map|map 연산]]과 달리, 각 입력 요소에서 다수의 출력 요소를 생성할 수 있다. ==개요== `flatMap`은 입력 데이터를 변환하면서 하나의 입력 요소가 여러 개의 출력 요소로 매핑될 수 있도록 하는 기능을 제공한다. 이는 리스트를 펼치는(flattening) 동작과 결합되어, 중첩된 데이터 구조를 단순화하는 데 유용하다. ==flatMap과 map의 차이== `[[아파치 스파크 RDD map|map]]과 flatMap의 주요 차이점은 다음과 같다. *map`: 입력 요소 하나당 하나의 출력 요소를 생성한다. *flatMap`: 입력 요소 하나당 0개 이상의 출력 요소를 생성할 수 있으며, 결과를 단일 리스트로 평탄화(flattens) 한다. 예제:<syntaxhighlight lang="scala"> val rdd = sc.parallelize(Array("Hello World", "Apache Spark")) // map을 사용한 경우 (배열이 중첩됨) val mapRDD = rdd.map(line => line.split(" ")) mapRDD.collect().foreach(println) // 출력 결과 // [Ljava.lang.String;@7a62b72f // [Ljava.lang.String;@3d04a2d6 // flatMap을 사용한 경우 (평탄화됨) val flatMapRDD = rdd.flatMap(line => line.split(" ")) flatMapRDD.collect().foreach(println) // 출력 결과 // Hello // World // Apache // Spark </syntaxhighlight> ==flatMap 예제== ===리스트 펼치기=== 다중 리스트가 포함된 데이터를 평탄화할 때 사용된다.<syntaxhighlight lang="scala"> val data = sc.parallelize(Seq(List(1, 2, 3), List(4, 5), List(6))) val flatMappedRDD = data.flatMap(x => x) flatMappedRDD.collect().foreach(println) // 출력 결과 // 1 // 2 // 3 // 4 // 5 // 6 </syntaxhighlight> ===텍스트 데이터를 단어 단위로 변환=== 한 줄의 문장을 단어 리스트로 변환할 때 유용하다.<syntaxhighlight lang="scala"> val textRDD = sc.parallelize(Array("Scala is great", "Spark is fast")) val wordsRDD = textRDD.flatMap(line => line.split(" ")) wordsRDD.collect().foreach(println) // 출력 결과 // Scala // is // great // Spark // is // fast </syntaxhighlight> ===JSON 데이터 처리=== JSON 데이터에서 특정 필드를 추출하는 경우에도 활용할 수 있다.<syntaxhighlight lang="scala"> import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Row val spark = SparkSession.builder.appName("FlatMapExample").getOrCreate() val sc = spark.sparkContext val jsonRDD = sc.parallelize(Seq( """{"name": "Alice", "hobbies": ["Reading", "Swimming"]}""", """{"name": "Bob", "hobbies": ["Cycling"]}""" )) import scala.util.parsing.json.JSON val hobbiesRDD = jsonRDD.flatMap(row => { val parsed = JSON.parseFull(row) parsed match { case Some(map: Map[String, Any]) => map.get("hobbies") match { case Some(hobbies: List[String]) => hobbies case _ => Nil } case _ => Nil } }) hobbiesRDD.collect().foreach(println) // 출력 결과 // Reading // Swimming // Cycling </syntaxhighlight> ==flatMap 사용 시 주의점== *flatMap`은 입력 요소가 `Iterable` 타입을 반환해야 하며, 내부 요소가 자동으로 평탄화된다. *데이터가 많을 경우 변환 후 RDD의 크기가 급격히 증가할 수 있으므로 메모리 사용량을 고려해야 한다. *map`과의 차이를 이해하고 적절한 경우에 사용해야 한다. ==같이 보기== *[[아파치 스파크 RDD]] *[[아파치 스파크 Pair RDD]]
요약:
IT 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는
IT 위키:저작권
문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다.
저작권이 있는 내용을 허가 없이 저장하지 마세요!
취소
편집 도움말
(새 창에서 열림)
둘러보기
둘러보기
대문
최근 바뀜
광고
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록