저는 스팍과 함께 아파치 스파크를 사용하여 ML 파이프 라인을 만듭니다. 내 파이프 라인에있는 트랜스포머 중 하나가 초기에이 공정에서 비용이 많이 드는 join
작업을 수행합니다. 이후 많은 기능을 가지고 내 ParamGrid
이것은 프로그램이 엄청난 보유하고, 그리드의 각 기능을 통해 최적화 동안 메모리에 DataFrame
합류 것을 의미합니다.스파크 MLLib 변압기에서 UID의 역할 이해
이 문제를 해결하기 위해이 큰 중간 크기 인 DataFrame
을 S3에있는 쪽모이에 작성하고 쪽모이 세공에서 읽은 DataFrame을 반환하여 사용자 지정 Transformer
을 만들었습니다. 이것은 잘 작동하고 모델 의 속도를까지 증가 시켰습니다. 캐싱 단계 전에 준비된 기능을 ParamGrid
에 추가했습니다. 나는 불꽃이 ParamGrid
을 통해 최적화 할 때마다 ... 내 신념, 그것은 어떤 수업을했다 것을 uid
가 작동하는 방법을 오해라고 생각
class Cacher(override val uid: String) extends Transformer {
// the cachePath variable determines the path within the S3 bucket
lazy val cachePath = Identifiable.randomUID(uid + "transformer-cache")
// ...
: 나는 S3에 마루를 쓸 때 나는에 의해 결정되는 경로를 사용 파이프 라인의 그 시점에서 상연되었고, 새로운 인스턴스가 생성되었고, 새롭고 독특한 uid
을 부여하여이를 추적합니다. 스파크가 새 Transformer
인스턴스에 unique uid
을 부여하지 않아 캐싱이 잘못되었다고 생각합니다. 즉 캐시의 새 인스턴스 Transformer
이 생성 될 때마다 캐싱 된 여기 엔 나무 마루가 지속적으로 덮어 쓰여지고 있음을 의미합니다. 파이프 라인이 생성하는 스테이지의 각 인스턴스마다 고유 한 무작위 uid
을 생성하는 방법에 대한 지침을 제공 할 수 있습니까?
건배! 단계별