gpt4 book ai didi

scala - spark 使用带有选项字段的案例类将数据帧转换为数据集

转载 作者:行者123 更新时间:2023-12-01 11:14:12 25 4
gpt4 key购买 nike

我有以下案例类:

case class Person(name: String, lastname: Option[String] = None, age: BigInt) {}

以及以下 json:
{ "name": "bemjamin", "age" : 1 }

当我尝试将数据框转换为数据集时:
spark.read.json("example.json")
.as[Person].show()

它向我显示以下错误:

Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve 'lastname' given input columns: [age, name];



我的问题是:如果我的架构是我的案例类并且它定义了姓氏是可选的,那么 as() 不应该进行转换吗?

我可以使用 .map 轻松解决此问题,但我想知道是否有另一种更清洁的替代方法。

最佳答案

我们还有另一种选择来解决上述问题。需要 2 个步骤

  • 确保可能缺失的字段被声明为可空
    Scala 类型(如 Option[_])。
  • 提供模式参数而不依赖于模式推断。例如,您可以使用 Spark SQL 编码器 :
    import org.apache.spark.sql.Encoders

    val schema = Encoders.product[Person].schema

  • 您可以按如下方式更新代码。
    val schema = Encoders.product[Person].schema

    val df = spark.read
    .schema(schema)
    .json("/Users/../Desktop/example.json")
    .as[Person]

    +--------+--------+---+
    | name|lastname|age|
    +--------+--------+---+
    |bemjamin| null| 1|
    +--------+--------+---+

    关于scala - spark 使用带有选项字段的案例类将数据帧转换为数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55114210/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com