Develop Log

Spark API 언어 고르기

Samgim 2017. 4. 15. 23:17

사실 하고 싶은 건 단순히 1000 여 건 될까말까한 데이터를 저장하고 싶은데,

완전 오버스펙이지만 공부한다고 생각하고 Spark 를 해보려고 한다.



AWS 에 올리려다가 일단 로컬에서 한 번 돌려보자는 생각이 들어서, 로컬에 다운 받고 해보았다.

다운이야 공식 사이트 https://spark.apache.org 여기서 다운 받았고,

참고는 역시 조대협씨 블로그를 참고 했다.



Spark에서 지원하는 언어를 고르려고 하는데 참 고민이 많이 된다.

Scala / Java / Python / R 중에서 고르면 되는데, 

R은 아예 할 줄 모르기도 하거니와 새로 공부해서 하기에는 Spark 만으로도 새로 익히기 벅찬데

R을 익히느라 스트레스 받고 싶지 않았다.

Java는 그냥 너무 답답하고(...) 지겹고 싫어서 탈락.


나머지 Scala 와 Python 중에서 고르려고 하니,

Python이 오래 전 부터 너무 배우고 싶었고 써본지도 오래되어서 해보고 싶었다.

Scala는 실무에서 한 번 써보니 내가 잘 쓰는 건 아닌데(...) 물려서 그냥 하기 싫고.

그런데 조사해보니 python 이 scala 보다 성능이 너무 떨어진다고 해서 고민이 되었다.

아래는 간단히 조사한 내용이다.

링크 타고타고타고 가다보니 내용은 참 많은데 다 읽기는 귀찮아서(...) 눈에 띄는 것만...



scala

- 조대협 씨 블로그에서 나온 링크를 따라가보니 python 에 비해 scala가 속도면에서 압도적으로 좋은 성능을 보였다.


- 아래 링크의 글을 보니 spark의 python API 들은 jvm에서 돌리려고 한 번 더 Scala로 감싸져 있다고 하네...

 그리고 그 과정에서 버그도 있고, 이슈도 있는데다가 이 과정 자체가 느려져서 성능에 bottleneck 이 된다고 한다.

 거기다 spark 최신 feature 들은 scala에 더 빨리 반영되고  python은... 

 https://www.linkedin.com/pulse/java-vs-scala-python-big-data-apache-spark-project-jeetendra-gangele


- 함수형을 쓸거면 python 보다는 scala가 더 적합하다고도 하고.


조대협씨 블로그

http://bcho.tistory.com/1031

조대협씨가 참고한 글

http://emptypipes.org/2015/01/17/python-vs-scala-vs-spark/



python

- 아래 링크를 보니 python은 좋은 CLI가 있다고 하네. Scala 도 꽤 긍정적이고.

 게다가 java 는 배포한 후에나 결과를 확인할 수 있고, 디버깅도 불편하다고 하는 후기가 있다.

 http://hoondongkim.blogspot.kr/2014/11/spark-2-python-vs-scala-vs-java-spark.html


- 아래 링크를 보니 scala의 장점도 많지만, 6번 visualization 툴이나 분석 툴을 쓰고 싶을 경우에는

 scala를 쓰는게 python 에 비하면 nightmare...라고 한다.

 https://datasciencevademecum.wordpress.com/2016/01/28/6-points-to-compare-python-and-scala-for-data-science-using-apache-spark/


- 아까 처음 링크의 끝부분에 보면, python 의 장점이 하나(...) 있다고.

예전 ML 알고리즘은 MLlib 에 없어서 MLlib 를 쓰지 않고 다른 Pandas 나 Scikit-learn 같은 걸 쓰면 python이 낫다고 한다.

그래도 최근 ML 관련 알고리즘 들은 python 보다 scala 로 먼저 구현될거라서(...) 최신 ML 관련된 걸 하려면 Scala가 낫다고 하네.





결론은 

내가 하고 싶은 건 성능 상 이슈가 클 정도로 그렇게 많은 데이터를 다루지는 않고,

그냥 내가 하고 싶은 언어가 python 이니까 python 으로 하자(...)

Data Visualization도 하고 싶고.


하지만 실서비스에서 한다면 scala나 java로 해야 할 것 같다.

편하게 인터프리터 쓰려면 scala를 하겠지만 scala 익숙한 사람들이 없으면 java로 하게 되겠지.