假设我有一个案例类,如下所示:
final case class Person(name: String, age: Int)
我想创建一个具有复杂结构类型Person
的单列数据帧。我想要spark来推断模式。
val data = Seq(Person("Tom", 30), Person("Anna", 35))
val df = spark.createDataFrame(data)
我想让spark推断数据帧是一个具有复杂类型Person
的单列。目前,它将Person
拆分为多列
您可以将数据映射到所需的结构。
助手类:
case class PersonWrapper(person: Person)
现在有两种选择:
- 在创建Spark数据帧之前映射scala序列:
val df = spark.createDataFrame(data.map( PersonWrapper(_)))
或
- 映射Spark数据帧/数据集:
val df = spark.createDataset(data).map(PersonWrapper(_))
您可以使用:
final case class PersonAttributes(name: String, age: Int)
final case class Person(attributes: PersonAttributes)
然后:
val data = Seq(
Person(PersonAttributes("Tom", 30)),
Person(PersonAttributes("Anna", 35))
)
或者,您可以按原样创建数据集,然后使用withColumn
和struct
来创建您想要的复杂结构:
.withColumn("data", struct(col("name"), col("age")))
祝你好运!