Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-具有大量字段的域对象_Scala_Apache Spark_Dao_Dto - Fatal编程技术网

Scala-具有大量字段的域对象

Scala-具有大量字段的域对象,scala,apache-spark,dao,dto,Scala,Apache Spark,Dao,Dto,这可能是一个愚蠢的问题,但我对Scala比较陌生,所以请容忍我。我试图为Scala中的Spark作业建模一个域对象,它反映了源记录的数据结构,包含100多个字段。我正试图找出最好的建模方法,因为我觉得简单地将所有字段添加到一个case类中并不舒服。我曾考虑将密切相关的字段分组到嵌套的case类中,但后来我在一些地方看到,不建议嵌套case类。我希望能就最佳方法提供一些意见 编辑:回应阿尔瓦罗的评论: 因此,本质上我们是说,不建议这样做: case class Product(name: Stri

这可能是一个愚蠢的问题,但我对Scala比较陌生,所以请容忍我。我试图为Scala中的Spark作业建模一个域对象,它反映了源记录的数据结构,包含100多个字段。我正试图找出最好的建模方法,因为我觉得简单地将所有字段添加到一个case类中并不舒服。我曾考虑将密切相关的字段分组到嵌套的case类中,但后来我在一些地方看到,不建议嵌套case类。我希望能就最佳方法提供一些意见

编辑:回应阿尔瓦罗的评论:

因此,本质上我们是说,不建议这样做:

case class Product(name: String,
                   desc: String,
                   productGroup: String) {


  case class ProductPack(packType: String,
                         packQuantity: Int,
                         packQuantityUnit: String,
                         packUnitPrice: Float)
}
虽然这样可以:

case class Product(name: String,
                   desc: String,
                   productGroup: String,
                   productPack: ProductPack) {


}

case class ProductPack(packType: String,
                       packQuantity: Int,
                       packQuantityUnit: String,
                       packUnitPrice: Float) {

}

您的更新是正确的

另一种选择:如果一个案例类在另一个概念的上下文中基本上是有意义的,那么有时我会在该概念的一个同伴中定义该案例类:

case class Product(
  name: String,
  desc: String,
  productGroup: String
  productPack: Product.Pack
) 

object Product {
  case class Pack(
    packType: String,
    packQuantity: Int,
    packQuantityUnit: String,
    packUnitPrice: Float
  )
}

这也应该是好的。类包含在对象中,但它不是“嵌套”在
产品
类中。

您在哪里读到不建议嵌套案例类?这是我阅读指南的地方之一,指南不鼓励在其他案例类(嵌套类)中定义案例类。但是,让一个案例类的属性引用其他案例类(在该类之外定义)是可以的。如果您提供一些实际的代码,可能是一个具有多个属性的类,我们可能可以提供更相关的帮助。如果您需要在单个案例类中添加22个以上的字段,请阅读以下内容:感谢您的输入。伴随对象中的case类看起来更干净