【问题标题】:Dataframe from sequence of objects来自对象序列的数据框
【发布时间】:2021-06-07 20:51:11
【问题描述】:

我有一个嵌套的 JSON 结构,我将其解码为以下类:

case class Player(name: Option[String], age: Option[Int])
case class Team(name: Option[String], players: Option[Seq[Player]])

// create dataframe from JSON structure
val teamDF = spark.read
  .option("multiline", true)
  .schema(teamSchema)
  .json("./test.json")
  .as[Team]
  .toDF()

我想创建另一个仅包含玩家的数据框,其中玩家的每个属性都是一列。

编辑: 以下代码有效,但仅适用于单个值(年龄)。我无法在单个 select 语句中对多个列使用explode。

val playerDF = teamDF.select(explode($"players.age"))

【问题讨论】:

    标签: scala apache-spark


    【解决方案1】:

    only one generator allowed per select clause

    分解顶级对象,即players,并使用players.nameplayers.age 访问各个列。

    df.withColumn("players",explode($"players")).select("players.name","players.age")
    

    下面的代码只是展示了如何在多个列上使用explode函数。

    df.withColumn("name",explode($"players.name"))
      .withColumn("age",explode($"players.age"))
      .select("name","age")
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多