카테고리 없음

[Zeppelin] jdbc에서 불러온 쿼리를 Python DataFrame으로 불러오기

sseozytank 2024. 5. 23.

제플린에는 Share Table Object가 가능하다. => Zeppelin 공식 문서

 

Apache Zeppelin 0.11.0 Documentation: Zeppelin-Context

spark.sql (*), bigquery, cassandra, elasticsearch, file, hbase, jdbc (*), livy, markdown, neo4j, python, shell (*), zengine

zeppelin.apache.org

 

공식 문서에서는 %jdbc를 사용하는데, 나는 hive를 사용해주었고 방법은 똑같다! 인터프리터만 본인 DB에 맞는걸로 변경해주면 된당. 

 

첫번째로, 불러오고 싶은 쿼리를 작성해준 후 인터프리터에 (saveAs=테이블명)을 추가해준다. 

%hive(saveAs=테이블명) 
SELECT * FROM test

 

마지막으로, python 인터프리터에서 z.getAsDataFrame 함수를 통해 테이블을 불러와준다. 

%python

df=z.getAsDataFrame('test_table')
df.head()

 

 

이렇게 불러와진 df는 padnas dataframe이라서 기존에 판다스 문법과 동일하게 사용해주면 된다.!!!! 끝!!!!! 

 

⛔ 혹시 initial_value must be str or None, not Javalist 에러 발생 시

해당 에러는 인덱싱 시 인덱스에 정수형이 아닌 문자열이 넣거나 인덱싱을 못한다. z.getAsDataFrame의 함수가 어떻게 정의되었는지 찾기는 힘들 것 같아서 야매로 사용해줬다. z.get('test')를 하면 리스트 형식으로 뜨는데 이걸 판다스로 전처리 후 사용 가능하다.

import pandas as pd
from io import StringIO

df_sql=z.get('test_table')

data = df_sql[0]

df = pd.read_csv(StringIO(data), sep='\t')

# Display the DataFrame
print(df)

 

댓글