본문 바로가기

D.S/DE

220403일 - spark numpy import 에러

728x90

 

사실 패키지야 설치하면 그만인데, 진짜 문제는 리눅스 패키지 의존성과 SPARK pandas와 pandas의 구분이었던 것 같다.

 

zeppelin에서 코드를 짜는데 pandas를 발견할 수 없다고 한다. 엥? 싶어서 import pandas를 해봤더니 패키지가 없다네.. 안이..분명히 저번에는 된 걸로 기억하는데 이게 무슨일;-,-

 

spark dataframe에서 pandas 데이터 프레임으로 변환하는 코드. pyspark에 들어가면 pandas 폴더가 있는데 이건 spark dataframe용으로 사용되나보다.

%spark.pyspark

# create DataFrame from python list. It can infer schema for you.
df1 = spark.createDataFrame([(1, "andy", 20, "USA"), (2, "jeff", 23, "China"), (3, "james", 18, "USA")]).toDF("id", "name", "age", "country")
df1.printSchema()
df1.show()

# create DataFrame from pandas dataframe
df2 = spark.createDataFrame(df1.toPandas())  # 문제의 부분
df2.printSchema()
df2.show()

 

 

분명히 코드를 끊어서 실행하면서 돌아간 걸로 기억하고 있었다. 그래서 docker-compose 수정하면서 생긴 문제인가 싶어서 compose 파일구성도 맨 처음일때로 되돌려서 실행도 해보고, 이미지도 지우고 다시 이미지 받아서 컨테이너 실행해보고 계속 확인했는데 도저히 안 된다. 그래서 pandas와 numpy 등을 새로 설치했다.

 

  • 사용하는 이미지: bde2020/spark-master:3.0.2-hadoop3.2

이 이미지는 alpine 리눅스이다. pandas 와 numpy를 설치하려면 이 리눅스에 이런저전 패키지들 설치를 먼저 해야 한다.

 

apk update                
apk add make \
    automake \
    gcc \
    g++ \
    python3-dev \
    libffi-dev \
    libc-dev

pip3 install pandas

 

그 이후에 제플린에서 spark 세션 재시작후 실행해보니 제대로 된다.

추가로 pyspark도 재설치하고, 제플린 spark PYSPARK_PYTHON : python3로 바꿔줬다.

제플린 컨테이너에만 pandas를 설치해주었음. pandas dataframe 작업은 스파크에서 실행되는 것이 아니라 그런지 다른 스파크 컨테이너에 설치해주지 않아도 큰 문제가 없었다.

 

 

matplotlib도 설치를 하려 했더니 pillow에서 의존성 패키지가 수두룩. 궁금해서 python-pillow dockerfile을 찾아보았다.

 

 

이미지의 Dockerfile도 alpine 리눅스에 뭐가 어떻게 설치되어있는지 찾아봄

 

 

참조

 

 

반응형