一、背景
1、在scala-2.10.x版本种,case class的元素超过22个以后即会编译报错
2、有些业务场景下,需要超过22个元素的值
我们项目当中日志一共有105个字段,在对原始日志进行处理转换成parquet文件的过程中,我们使用的方法是定义一个case class类,将这105个字段封装到这个对象里面,基于这种方式构建的DataFrame。结果运行的时候报错了,之后我们查阅官网,发现在scala 2.10版本中case class一共只支持22个字段,如果超过了就会报错,然后官网也给了我们解决方法,就是自定义一个类实现product特质,这样就能解决这个问题
二、如何解决
1、Scala提供了解决方案,即使用类实现Product特质
package com.ngaa.scala /**
* @author Created by yangjf on 20180712.
* Update date:
* Time: 15:43
* Project: dev-spark01-examples
* Package: com.ngaa.scala
* Describe : Scala构建超过22个元素的class
* API参考:
* https://www.scala-lang.org/api/current/scala/Product.html
* 学习参考:
* https://www.artima.com/pins1ed/
*
*/
object More22Elements { def main(args: Array[String]) { val student = new Student(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27) /* 获取其中一个元素 */
pr

在Scala 2.10.x版本中,case class限制最多22个字段,当业务需求超过此限制时会导致编译错误。为解决这个问题,可以采取两种方式:一是自定义类并实现Product特质;二是升级到Scala 2.11及以上版本,该版本已取消此限制。项目中因日志处理需要105个字段,通过case class构建DataFrame时遇到问题,采用上述方法成功解决。
最低0.47元/天 解锁文章
67

被折叠的 条评论
为什么被折叠?



