,可以使用Spark的内置函数和操作来实现。具体步骤如下:
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
val spark = SparkSession.builder()
.appName("Column Unpivot")
.getOrCreate()
val df = spark.createDataFrame(Seq(
("Alice", 25, "New York"),
("Bob", 30, "London"),
("Charlie", 35, "Paris")
)).toDF("name", "age", "city")
val unpivotedDF = df.selectExpr("name", "stack(2, 'age', age, 'city', city) as (attribute, value)")
这里使用了stack
函数,将"age"和"city"两列分解为单独的行,新生成的DataFrame包含"name"、"attribute"和"value"三列。
unpivotedDF.show()
完整的代码示例:
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
val spark = SparkSession.builder()
.appName("Column Unpivot")
.getOrCreate()
val df = spark.createDataFrame(Seq(
("Alice", 25, "New York"),
("Bob", 30, "London"),
("Charlie", 35, "Paris")
)).toDF("name", "age", "city")
val unpivotedDF = df.selectExpr("name", "stack(2, 'age', age, 'city', city) as (attribute, value)")
unpivotedDF.show()
这样就可以将多列分解为单独的行,每行包含"name"、"attribute"和"value"三列。在实际应用中,这种操作可以用于数据清洗、数据转换等场景。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云