Pyspark Window function
2024. 3. 14. 16:48
데이터 엔지니어링/Spark
Pyspark 에서 Window 함수를 사용해 rank 나 row number 등과 같은 결과를 계산할 수 있다. 직접 사용해보았지만 제대로 이해하고 사용하고 있는 것 같지 않아서 정리해보려고 한다. Window Functions Pyspark window 함수는 frame 과 partition 과 같은 행(row) 의 그룹에서 입력된 모든 row 를 하나의 값으로 반환한다. Window 함수의 핵심은 여러 개의 row 를 하나의 값으로 사용한다는 것이다. Pyspark window 함수는 3가지 종류의 함수로 구분된다고 한다. Ranking Functions Analytic Functions Aggregate Functions 아래의 테이블은 Window Functions 를 정리한 함수들이다. 참고하..
Spark explode() 함수 사용시 주의할 점
2024. 2. 11. 18:16
데이터 엔지니어링/Spark
spark explode() 함수는 리스트 타입의 컬럼에서 각각의 element 를 하나의 row 로 펼쳐주는 기능을 한다. explode() 함수의 사용 방법에 대해서는 다음과 같이 이전에 정리해두었다. https://jaynamm.tistory.com/entry/Spark-explode-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%84%9C-List-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0 Spark explode() 사용해서 List 로 된 컬럼을 행으로 분리하기 Spark Dataframe 에 다음과 같이 리스트 형태로 들어간 컬럼이 있을 것이다. scala> val df = Seq(("Nam", List("A"..
Spark explode() 사용해서 List 로 된 컬럼을 행으로 분리하기
2023. 10. 1. 17:57
데이터 엔지니어링/Spark
Spark Dataframe 에 다음과 같이 리스트 형태로 들어간 컬럼이 있을 것이다. scala> val df = Seq(("Nam", List("A", "B", "C", "D"))).toDF("name", "grade") df: org.apache.spark.sql.DataFrame = [name: string, grade: array] scala> df.show() +----+------------+ |name| grade| +----+------------+ | Nam|[A, B, C, D]| +----+------------+ 이런 경우에 grade 라는 컬럼을 각 row 로 분리할 필요가 생길수도 있다. 이때, explode() 함수를 통해서 리스트를 각 row 로 분리해줄 수 있다. 원하는 ..
Spark User Defined Functions (UDFs)
2023. 10. 1. 17:29
데이터 엔지니어링/Spark
Spark 를 사용하다보면 UDFs 를 사용하여 새로운 column 을 만드는 경우가 많이 있다. 그래서 Spark UDFs 에 대해서 정확하게 무엇을 말하고 어떻게 사용하는 지에 대해서 정리해보려고 한다. 정리는 아래의 공식 문서를 참고해서 정리해보았다. https://spark.apache.org/docs/latest/sql-ref-functions-udf-scalar.html Scalar User Defined Functions (UDFs) - Spark 3.5.0 Documentation spark.apache.org Spark User-Defined Functions Spark User-Defined Functions (UDFs) 는 하나의 행에서 동작하는 사용자가 프로그래밍할 수 있는 루틴을 ..
Spark multi process error in macOS
2023. 9. 27. 11:26
데이터 엔지니어링/Spark
macos 에서 pyspark 를 통해 디버깅을 하던 도중 다음과 같은 에러가 발생했다. To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 23/09/27 10:36:44 WARN package: Truncated the string representation of a plan since it was too large. This behavior can be adjusted by setting 'spark.sql.debug.maxToStringFields'. objc[7304]: +[__NSCFConstantString initialize] may have been in progress in..
Spark JDBC Data Source Option
2023. 9. 26. 12:32
데이터 엔지니어링/Spark
spark 를 통해 JDBC 를 통해 데이터베이스의 테이블을 불러올 때 사용하는 옵션에 대해서 정리해보려고 한다. Spark JDBC To Other Databases 해당 내용은 야래의 spark 공식 문서에서 확인할 수 있다. https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html JDBC To Other Databases - Spark 3.5.0 Documentation spark.apache.org 문서를 보면 다음과 같이 설명이 되어있다. Spark SQL 은 JDBC 를 사용해서 다른 데이터베이스들로부터 데이터를 읽을 수 있는 data source 를 포함하고 있다. 이 기능은 JdbcRDD 를 사용하는 것보다 선호된다. 그 이유는 D..
spark config 리스트 정리 (spark.config.set)
2023. 9. 17. 19:44
데이터 엔지니어링/Spark
spark config 에 대해서 정리하려고 한다. 사용해본 config 설정이 많지는 않지만 여러 config 들에 대해서 계속해서 정리해나가야겠다. spark config setting 방법 # spark session 생성 spark = SparkSession.builder.appName("test").getOrCreate() # config 예시 spark.conf.set("spark.sql.inMemoryColumnarStorage.compressed", True) spark.conf.set("spark.sql.adaptive.enabled", True) spark.conf.set("spark.sql.adaptive.coalescePartitions.enabled", True) spark.co..
Spark SQL function - ifnull(), nullif(), nvl(), nvl2()
2022. 7. 9. 21:39
데이터 엔지니어링/Spark
ifnull(expr1, expr2) : expr1 이 NULL 이면 expr2 반환 ifnull(expr1, expr2) nullif(expr1, expr2) : expr1 과 expr2 가 같으면 NULL, 다르면 expr1 반환 nullif(expr1, expr2) nvl(expr1, expr2) : expr1 이 NULL 이면 expr2 반환 nvl(expr1, expr2) nvl2(expr1, expr2, expr3) : expr1 이 NULL 이 아니면 expr2, NULL 이면 expr3 반환 nvl2(expr1, expr2, expr3)