【问题标题】:Struct data type when creating dataframe with createDataFrame in Scala在 Scala 中使用 createDataFrame 创建数据帧时的结构数据类型
【发布时间】:2022-07-27 04:52:04
【问题描述】:

在 PySpark 中,我们可以在使用 createDataFrame 时创建 struct 数据类型,如以下示例中的 ("b", "c")("e", "f")

df = spark.createDataFrame([
    ["a", ("b", "c")],
    ["d", ("e", "f")]
])

df.printSchema()
# root
#  |-- _1: string (nullable = true)
#  |-- _2: struct (nullable = true)
#  |    |-- _1: string (nullable = true)
#  |    |-- _2: string (nullable = true)
df.show()
# +---+------+
# | _1|    _2|
# +---+------+
# |  a|{b, c}|
# |  d|{e, f}|
# +---+------+

Scala 中是否有类似的方法 - 在 createDataFrame 中创建结构模式,而不使用 org.apache.spark.sql.functions

【问题讨论】:

    标签: dataframe scala apache-spark struct


    【解决方案1】:

    对于您的具体示例,您可以使用元组并调用 this flavor of createDataFrame

    val spark: SparkSession = ???
    
    val df = spark.createDataFrame(Seq(
      ("a", "b" -> "c"),
      ("d", "e" -> "f")
    ))
    
    df.printSchema()
    /*
    root
     |-- _1: string (nullable = true)
     |-- _2: struct (nullable = true)
     |    |-- _1: string (nullable = true)
     |    |-- _2: string (nullable = true)
    */
    
    df.show()
    /*
    +---+------+
    | _1|    _2|
    +---+------+
    |  a|[b, c]|
    |  d|[e, f]|
    +---+------+
    */
    

    但是在处理许多字段,尤其是嵌套字段时,元组可能会变得难以管理。您可能希望使用 case class(s) 对数据进行建模并改用它:

    case class Person(name: String, age: Int)
    
    case class Car(manufacturer: String, model: String, mileage: Double, owner: Person)
    
    ...
    
    val df = spark.createDataFrame(Seq(
      Car("Toyota", "Camry", 81400.8, Person("John", 37)),
      Car("Honda", "Accord", 152090.2, Person("Jane", 25))
    ))
    
    df.printSchema()
    /*
    root
     |-- manufacturer: string (nullable = true)
     |-- model: string (nullable = true)
     |-- mileage: double (nullable = false)
     |-- owner: struct (nullable = true)
     |    |-- name: string (nullable = true)
     |    |-- age: integer (nullable = false)
    */
    
    df.show()
    /*
    +------------+------+--------+----------+
    |manufacturer| model| mileage|     owner|
    +------------+------+--------+----------+
    |      Toyota| Camry| 81400.8|[John, 37]|
    |       Honda|Accord|152090.2|[Jane, 25]|
    +------------+------+--------+----------+
    */
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      相关资源
      最近更新 更多