실습
실습 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 |