Spark

Spark scala - 컬럼 타입 변경과, ArrayType 컬럼의 element 타입 변경

케키키케 2024. 7. 1. 23:54

코드로 보자

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

// 예시 DataFrame 생성
val data = Seq(
  (1, Array(Row("1", "A"), Row("2", "B"), Row("3", "C"))),
  (2, Array(Row("4", "D"), Row("5", "E"), Row("6", "F")))
)
val schema = StructType(Seq(
  StructField("id", IntegerType, true),
  StructField("items", ArrayType(StructType(Seq(
    StructField("number", StringType, true),
    StructField("letter", StringType, true)
  )), true), true)
))
val df = spark.createDataFrame(data).toDF("id", "items")

// 1. 컬럼 타입 변경 : id의 타입을 IntegerType -> StringType으로 변경
val modifiedDF1 = df.withColumn("id", col("id").cast(StringType))

modifiedDF.printSchema()

// 2. ArrayType 컬럼의 element의 타입 변경 : items 배열의 number 필드를 IntegerType으로 변경
val modifiedDF2 = df.withColumn("items", expr("transform(items, x -> struct(CAST(x.number AS INT) AS number, x.letter AS letter))"))

modifiedDF.printSchema()