SQL만 하던 사람의 첫 Fabric Notebook: spark.sql부터 시작하세요
PySpark를 몰라도 Notebook에서 %%sql과 spark.sql()로 Lakehouse 테이블을 바로 조회할 수 있어요. DataFrame이 결과 집합과 어떻게 다른지부터 정리했어요.
카드뉴스
1 / 7
원문: Develop, execute, and manage notebooks 게시일: 2026-08-07
Fabric에서 Lakehouse 테이블을 좀 더 자유롭게 조회하고 싶어서 Notebook을 처음 열어보면, 셀 위쪽에 “PySpark (Python)“이라고 적힌 언어 선택 드롭다운부터 보여요. 여기서 겁먹을 필요 없어요. PySpark를 몰라도, SQL만 알아도 오늘부터 바로 쓸 수 있어요. 시작점은 익숙한 그 언어, SQL이에요.
Notebook은 여러 언어를 섞어 쓰는 곳이에요
Fabric Notebook은 PySpark(Python), Spark(Scala), Spark SQL, SparkR 네 가지 Apache Spark 언어를 지원해요. 노트북 하나의 기본 언어를 정해둘 수도 있지만, 셀마다 맨 앞에 매직 커맨드를 적어서 그 셀만 다른 언어로 바꿀 수도 있어요.
| 매직 커맨드 | 언어 | 설명 |
|---|---|---|
%%pyspark |
Python | Apache Spark Context에 대해 Python 쿼리를 실행해요 |
%%spark |
Scala | Apache Spark Context에 대해 Scala 쿼리를 실행해요 |
%%sql |
Spark SQL | Apache Spark Context에 대해 Spark SQL 쿼리를 실행해요 |
%%sparkr |
R | Apache Spark Context에 대해 R 쿼리를 실행해요 |
즉 %%sql을 셀 맨 위에 적으면, 그 순간 그 셀은 SQL 셀이 돼요. 기본 언어가 PySpark로 잡혀 있어도 상관없어요.
%%sql
SELECT CustomerId, COUNT(*) AS OrderCount
FROM orders
GROUP BY CustomerId
ORDER BY OrderCount DESC
이 방식의 장점은 노트북 전체를 PySpark로 바꿀 필요 없이, 조회는 익숙한 SQL로 하고 그 결과를 뒤에 이어지는 Python 셀에서 계속 다룰 수 있다는 거예요.
spark.sql()도 결국 같은 SQL이에요
%%sql 매직이 셀 전체를 SQL 모드로 바꾸는 것이라면, spark.sql()은 Python 코드 한 줄 안에서 SQL 문자열을 그대로 실행하는 방법이에요.
df = spark.sql("SELECT CustomerId, COUNT(*) AS OrderCount FROM orders GROUP BY CustomerId")
두 방식 모두 Spark SQL 엔진을 그대로 쓰기 때문에 실행되는 쿼리 자체는 같아요. 차이는 결과를 어떻게 다루느냐예요. %%sql 매직은 그 셀 안에서 결과를 바로 보여주는 데 초점이 맞고, spark.sql()은 결과를 변수(df)에 담아서 이후 Python 코드에서 계속 가공할 수 있게 해줘요. SQL로 시작해서 이후 단계를 Python으로 넘어가야 한다면 spark.sql() 쪽이 자연스러워요.
DataFrame은 결과 집합과 뭐가 다른가
SSMS나 Power BI에서 SQL을 실행하면 결과가 바로 화면에 뿌려지는 표(결과 집합)로 나와요. 반면 spark.sql()이 돌려주는 건 DataFrame이에요. DataFrame은 그 자체로는 아직 “화면에 뿌려진 표”가 아니라, 데이터를 어떻게 읽고 계산할지에 대한 정의예요. Spark는 실제로 결과가 필요해지는 시점(출력하거나, 다른 테이블에 쓰거나 할 때)에야 그 계산을 실제로 돌려요.
그래서 spark.sql(...)만 실행하고 아무것도 안 하면 화면에 아무것도 안 보여요. 결과를 눈으로 확인하려면 한 단계가 더 필요해요.
display()로 결과를 확인하세요
Fabric Notebook에는 display()라는 최상위 함수가 있어요. DataFrame이든 다른 Python 객체든 display()에 넘기면 노트북 출력 영역에 표 형태로 렌더링돼요.
df = spark.sql("SELECT CustomerId, COUNT(*) AS OrderCount FROM orders GROUP BY CustomerId")
display(df)
SSMS에서 쿼리를 실행하면 결과 그리드가 바로 뜨는 것과 감각적으로 비슷해요. 차이라면 display()는 명시적으로 호출해야 한다는 점, 그리고 결과 화면에서 바로 차트로 바꿔볼 수 있다는 점 정도예요.
toPandas()는 언제 쓰나
DataFrame은 Spark 클러스터 위에서 분산 처리되는 걸 전제로 만들어졌어요. 그런데 matplotlib 같은 일반 Python 시각화 라이브러리나, pandas 기반의 세세한 데이터 조작은 Spark DataFrame을 직접 받아주지 않아요. 이럴 때 toPandas()로 Spark DataFrame을 Pandas DataFrame으로 바꿔요.
df_pandas = df.toPandas()
다만 toPandas()는 분산돼 있던 데이터를 노트북 세션(드라이버) 메모리로 전부 끌어모으는 동작이에요. 조회 결과가 수십만 행을 넘어가는 대용량이라면, toPandas()로 바꾸기 전에 GROUP BY나 LIMIT으로 먼저 데이터를 줄여두는 게 안전해요. “SQL로 웬만큼 추려낸 다음, 마지막에만 Pandas로 넘긴다”는 순서를 기본값으로 삼으면 돼요.
정리
Fabric Notebook의 언어 선택 드롭다운을 PySpark로 바꿀 필요는 없어요. %%sql 매직이나 spark.sql()로 익숙한 SQL을 그대로 쓰면 돼요. 다만 결과가 SSMS처럼 자동으로 화면에 뜨지 않는다는 점, DataFrame은 실제로 쓰일 때까지 계산을 미룬다는 점만 새로 익히면 돼요. 화면에서 확인하려면 display(), 일반 Python 시각화 라이브러리로 넘기려면 toPandas(), 이 두 가지만 기억해두면 SQL 경험만으로도 Notebook 조회는 바로 시작할 수 있어요.






