[t:/]$ 지식_

pyspark에서 java 컴포넌트 활용 및 디렉토리 체크

2022/12/20
    sc = SparkContext()
    conf = sc._jsc.hadoopConfiguration()
    Path = sc._gateway.jvm.org.apache.hadoop.fs.Path

    dts = [ p + '/*' for p in dts if Path(p).getFileSystem(conf).exists(Path(p))]

pyspark 에서 read 함수류는 파일이 존재하지 않으면 에러를 뱉는다. 레이지 익스큐션이므로 루프 상의 트라이 캣치로 잡는 것은 곤란하다. 아니 사실 예외를 그렇게 쓰면 안 된다니까? ㅎㅎ

저렇게 자바 컴포넌트를 직접 불러다가 활용할 수 있다. pyspark은 어차피 자바 데이터형을 통해서 동작하는데, 이것 때문에 문제가 많다. 자칫 쓰리쿠션 돌리면 직렬화 한다고 하세월이고, 뭐 디버깅 메시지로 찍고 싶어도 피클링 에러가 나고 그런다.

많이들 하는 말로 스팍에서 자바를 쓰려면 그냥 스칼라를 쓰세요 하는데 우리가 실력이 없지! 경력이 없냐? 할 줄 아는게 없다. 애초에 pyspark을 쓰는 것은 쉽게 가려는 것인데 하다보면 이게 뭔가 싶다. 프레임웤의 답답한 틀에 갇혀서 일을 하려니 힘들다. 스팍은 점점 더 데이터 프레임으로만 일하라는 분위기인데 미세 조작은 rdd가 편하고, 레코드 지향이냐 컬럼 지향이냐 문제가 생기고 내부적으로 rdd 피봇팅 한다고 생쑈하는 것 같고 뭐 그렇다. udf, 직렬화, 벡터라이제이션, 최적화, pandas_udf 등 뭐 시키는 데로만 일하라고 하는 것 같은데 짬뽕 먹고 싶다.









[t:/] is not "technology - root". dawnsea, rss