우선 데이터 프레임 내에서 한 string 스키마 구조의 컬럼에서 특정 문자열이 포함된 데이터를 filter로 걸러내는 코드는 아래와 같다.
아래에서는 search strings list에 있는 단어들을 포함하고 있는 데이터를 뽑아내는 방법이다.
여러 단어들이 아닌 한 단어를 포함하고 있는 데이터를 뽑고자 할때는 reduce 함수를 쓸 필요 없이 아래와 같이 pyspark 내장함수를 활용하면 된다.
- df.filter(col("col1").contains("기내용")) - 기내용이 포함된 데이터 산출
- df.filter(~col("col1").contains("기내용")) - 기내용이 포함되지 않은 데이터 산출
from pyspark.sql import SparkSession
from pyspark.sql.functions import col
from functools import reduce
# Create a Spark session
spark = SparkSession.builder.appName("TitleCount").getOrCreate()
# Sample data
data = [("아메리칸투어리스터 여행 가방",),
("기내용 가방 여행용",),
("여권 보관지갑",),
("트래커 스마트 기기",),
("베트남 여행 가이드",),
("수화물 포장 비용",),
("캐리어는 다용도로 사용 가능",),
("이것은 테스트 문장입니다",)]
# Create a DataFrame
df = spark.createDataFrame(data, ["title"])
# Strings to search for
search_strings = ["아메리칸투어리스터", "기내용", "여권", "트래커", "베트남", "수화물", "캐리어"]
# Add filter conditions for each search string
conditions = [col("title").contains(search_string) for search_string in search_strings]
##not_conditions = [~col("title").contains(search_string) for search_string in search_strings]
# Apply the filters and group by "title" to count occurrences
result_df = df.filter(reduce(lambda a, b: a | b, conditions)).groupBy("title").count()
# Show the result
result_df.show(300, truncate=False)
# Stop the Spark session
spark.stop()
300x250
반응형
'프로그래밍 > PySpark' 카테고리의 다른 글
[PySpark] 오버샘플링(oversampling), 언더샘플링(undersampling) (0) | 2023.09.18 |
---|---|
[PySpark] round(반올림), ceil(올림), floor(내림) 함수로 소수점 자리까지 다루기 (2) | 2023.09.15 |
[PySpark] 학습된 로지스틱 모형의 계수 확인하기. (0) | 2023.08.25 |
[PySpark] array_intersect로 array간 같은 value값 찾기 (0) | 2023.08.21 |
[PySpark] Union(= unionAll) 함수로 두 데이터 프레임 합치기 (0) | 2023.07.11 |