Spark如何创建包含Person结构体的单列复杂类型DataFrame
解决方案
要让Spark将Person作为单列的结构体类型而非拆分成多列,你需要把每个Person实例包装成一个容器(元组或自定义样例类),让Spark识别这是一个单独的字段:
方法1:用元组包裹
直接把每个Person放到单元素元组里,之后重命名列名:
val data = Seq((Person("Tom", 30)), (Person("Anna", 35))) val df = spark.createDataFrame(data).toDF("person")
方法2:用包装类包裹
定义一个包含Person类型字段的样例类,用这个类来构建数据序列:
final case class PersonWrapper(person: Person) val data = Seq(PersonWrapper(Person("Tom", 30)), PersonWrapper(Person("Anna", 35))) val df = spark.createDataFrame(data)
两种方法最终生成的DataFrame都会有一个名为person的列,其类型是包含name和age字段的结构体,你可以通过df.printSchema()验证结果:
root |-- person: struct (nullable = true) | |-- name: string (nullable = true) | |-- age: integer (nullable = false)
内容的提问来源于stack exchange,提问作者suleydaman
相关产品推荐
相关产品推荐

