데브코스 TIL/빅데이터, 스트리밍 데이터 처리

Spark 프로그래밍 실습 4

예니ㅣ 2024. 1. 17. 15:48

실습

실습 4. Stackoverflow 서베이 기반 인기 언어 찾기

  • 입력 데이터 : LanguageHaveWorkedWith, LanguageWantToWorkWith 필드는  ;를 구분자로 사용
  • 별개 레코드로 분리
  • 가장 많이 사용되는 언어 top 50과 가장 많이 쓰고 싶은 언어 top 50 계산

 

# 파일 다운로드
!wget https://s3-geospatial.s3-us-west-2.amazonaws.com/survey_results_public.csv
from pyspark.sql import SparkSession

spark = SparkSession \
    .builder \
    .appName("Python Spark SQL basic example") \
    .config("spark.jars", "/usr/local/lib/python3.7/dist-packages/pyspark/jars/RedshiftJDBC42-no-awssdk-1.2.20.1043.jar") \
    .getOrCreate()
  
df = spark.read.csv("survey_results_public.csv", header=True).select('ResponseId', 'LanguageHaveWorkedWith', 'LanguageWantToWorkWith')


import pyspark.sql.functions as F

# language_have 필드 설정
df2 = df.withColumn(
    "language_have",
    F.split(F.trim(F.col("LanguageHaveWorkedWith")), ";")
)

# language_want 필드 설정
df3 = df2.withColumn(
    "language_want",
    F.split(F.trim(F.col("LanguageWantToWorkWith")), ";")
)


# have_top50 추출 
df_language_have = df3.select(
    df3.ResponseId,
    F.explode(df3.language_have).alias("language_have")
)
 
df_language_have.groupby("language_have").count().sort(F.desc("count")).collect()
df_language_have.groupby("language_have").count().orderBy('count', ascending=False).collect()

df_language50_have = df_language_have.groupby("language_have")\
    .count()\
    .orderBy('count', ascending=False)\
    .limit(50)

df_language50_have.write.mode('overwrite').csv("language50_have")

!cat language50_have/part-00000-d133bb73-6f57-4c38-a963-0c9ddf10dabf-c000.csv


# want_top50 추출
df_language_want = df3.select(
    df3.ResponseId,
    F.explode(df3.language_want).alias("language_want")
)

df_language50_want = df_language_want.groupby("language_want").count().orderBy('count', ascending=False).limit(50)

df_language50_want.write.mode('overwrite').csv("language50_want")

'데브코스 TIL > 빅데이터, 스트리밍 데이터 처리' 카테고리의 다른 글

Spark SQL 소개  (0) 2024.01.17
Spark 프로그래밍 실습 5  (0) 2024.01.17
Spark 프로그래밍 실습 3  (0) 2024.01.17
Spark 프로그래밍 실습 1/2  (0) 2024.01.17
Spark 설치 및 테스트  (0) 2024.01.17