Apache Spark를 사용하여 분석

이 자습서에서는 Azure Synapse용 Apache Spark를 사용하여 데이터를 로드하고 분석하는 기본 단계에 대해 알아봅니다.

서버리스 Apache Spark 풀 만들기

  1. Synapse Studio의 왼쪽 창에서 관리>Apache Spark 풀을 차례로 선택합니다.
  2. 새로 만들기를 선택합니다.
  3. Apache Spark 풀 이름Spark1을 입력합니다.
  4. 노드 크기Small을 입력합니다.
  5. 노드 수의 경우 최솟값 및 최댓값을 각각 3으로 설정합니다.
  6. 검토 + 만들기>만들기를 차례로 선택합니다. 몇 초 후에 Apache Spark 풀이 준비됩니다.

서버리스 Apache Spark 풀 이해

서버리스 Spark 풀은 사용자가 Spark를 사용하는 방법을 표시하는 방식입니다. 풀 사용을 시작하면 필요한 경우 Spark 세션이 생성됩니다. 풀은 해당 세션에서 사용할 Spark 리소스의 수와 세션이 자동으로 일시 중지되기 전까지의 지속 시간을 제어합니다. 풀 자체가 아닌 해당 세션 중에 사용되는 Spark 리소스에 대한 비용을 지불합니다. 이러한 방식으로 Spark 풀을 사용하면 클러스터를 관리하지 않고 Apache Spark를 사용할 수 있습니다. 이는 서버리스 SQL 풀의 작동 방식과 유사합니다.

Spark 풀을 사용하여 NYC Taxi 데이터 분석

참고 항목

샘플 데이터를 기본 스토리지 계정에 배치했는지 확인합니다.

  1. Synapse Studio에서 개발 허브로 이동합니다.

  2. 새 Notebook을 만듭니다.

  3. 새 코드 셀을 만들고, 다음 코드를 해당 셀에 입력합니다.

    %%pyspark
    df = spark.read.load('abfss://users@contosolake.dfs.core.windows.net/NYCTripSmall.parquet', format='parquet')
    display(df.limit(10))
    
  4. abfss URI 체계에 따라 스토리지 계정에서 샘플 파일을 참조하도록 로드 URI를 수정합니다.

  5. 노트북의 연결 대상 메뉴에서 이전에 만든 Spark1 서버리스 Spark 풀을 선택합니다.

  6. 셀에서 실행을 선택합니다. Synapse는 필요한 경우 새 Spark 세션을 시작하여 이 셀을 실행합니다. 새로운 Spark 세션이 필요한 경우 처음에는 만드는 데 약 2~5분 정도 소요됩니다. 세션이 만들어지면 셀이 실행되는 데 약 2초가 소요됩니다.

  7. 데이터 프레임의 스키마만 확인하려면 다음 코드를 사용하여 셀을 실행합니다.

    %%pyspark
    df.printSchema()
    

Spark nyctaxi 데이터베이스에 NYC 택시 데이터 로드

데이터는 df라는 데이터 프레임을 통해 사용할 수 있습니다. 이제 이를 nyctaxi라는 Spark 데이터베이스에 로드합니다.

  1. Notebook에 새 코드 셀을 추가하고 다음 코드를 입력합니다.

    %%pyspark
    spark.sql("CREATE DATABASE IF NOT EXISTS nyctaxi")
    df.write.mode("overwrite").saveAsTable("nyctaxi.trip")
    

Spark 및 Notebook을 사용하여 NYC 택시 데이터 분석

  1. 새 코드 셀을 만들고, 다음 코드를 입력합니다.

    %%pyspark
    df = spark.sql("SELECT * FROM nyctaxi.trip") 
    display(df)
    
  2. 셀을 실행하여 nyctaxi Spark 데이터베이스에 로드한 NYC 택시 데이터를 표시합니다.

  3. 새 코드 셀을 만들고, 다음 코드를 입력합니다. 이 데이터를 분석하고 결과를 nyctaxi.passengercountstats라는 테이블에 저장합니다.

    %%pyspark
    df = spark.sql("""
       SELECT passenger_count,
           SUM(trip_distance) as SumTripDistance,
           AVG(trip_distance) as AvgTripDistance
       FROM nyctaxi.trip
       WHERE trip_distance > 0 AND passenger_count > 0
       GROUP BY passenger_count
       ORDER BY passenger_count
    """) 
    display(df)
    df.write.saveAsTable("nyctaxi.passengercountstats")
    
  4. 셀 결과에서 차트를 선택하여 시각화된 데이터를 표시합니다.

다음 단계