Spark:创建单列复杂类型数据帧



假设我有一个案例类,如下所示:

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)

现在有两种选择:

  1. 在创建Spark数据帧之前映射scala序列:
val df = spark.createDataFrame(data.map( PersonWrapper(_)))

  1. 映射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))
)

或者,您可以按原样创建数据集,然后使用withColumnstruct来创建您想要的复杂结构:

.withColumn("data", struct(col("name"), col("age")))

祝你好运!

相关内容

最新更新