전 포스팅에서, explode 함수로 array 구조를 펼쳤다. 그럼 이번엔 struct 구조의 데이터를 분해해보자.
from pyspark.sql import functions as F
# 스파크 세션 생성
spark = SparkSession.builder \
.appName("Struct_Example") \
.getOrCreate()
data = [(('bigint','id'), 1),
(('bigint','pwd'), 3),
(('int','age'),12)]
df = spark.createDataFrame(data, ("schema", "data"))
df.show()
스키마 정보가 struct 구조로 되어있는 DataFrame이 있다고 치자.
나는 저기서 컬럼명 부분만 따오고 싶당. 그럼 schema 컬럼에 있는 저 struct 데이터를 컬럼으로 쪼개주면 바로 select 해올 수있다. columns.구조체요소명 함수를 쓰면 쉽게 가능하다.
columns.*
우선, struct 구조에서는 구조체 컬럼을 불러올 수 있다.
root
|-- schema: struct (nullable = true)
| |-- _1: string (nullable = true)
| |-- _2: string (nullable = true)
|-- data: long (nullable = true)
위에서 이렇게 되어있으면, schema 컬럼의 구조체는 _1과 _2인데, 내가 첫번째 부분만 불러오고 싶으면 아래와 같이 select 해주면 된다.
df.select(('schema._1')).show()
그럼 이렇게, schema 스트럭 구조의 컬럼에서 앞에 있는것만 _1 컬럼으로 분리할 수 있는것. 컬럼명을 바꾸고 싶으면 alias 지정해주면 된다.
from pyspark.sql.functions import col
df.select(col("schema._1").alias("data_type")).show()
*을 통해 , 모든 구조체를 분리해서 컬럼으로 만들 수도 있다. 위처럼 입력하면 아래와 같은 Data Frame이 탄생 (단, *쓸 시
컬럼명은 다시 지정해줘야함)
#이렇게 불러오거나
df.select(col("schema._1").alias("data_type"),col("schema._2").alias("column_name"),'data').show()
#이렇게 불러오자
df.select('schema.*','data').show()
'스파크 Spark' 카테고리의 다른 글
[Spark] PySpark에서 explode 함수로 array구조 분해하기 (0) | 2024.05.10 |
---|---|
[Spark] Pyspark 데이터 전처리 단골 코드 (Pyspark Method ver.) (0) | 2024.04.26 |
[Spark] 원격 주피터 허브에서 로컬 Spark 세션 및 hdfs 불러오기 (0) | 2024.04.17 |
[Spark] 우분투(Ubuntu)에서 하둡(Hadoop)위에 Spark(스파크)를 올리고, jupyter notebook으로 열기 (0) | 2024.03.29 |
[Spark] Pyspark spark sql 사용하기 (0) | 2024.02.20 |
댓글