背景:把一列的DataSet扩张到25列,就报了上面的错,也就是tuple超过了它默认允许的元素个数。

/*
*  // 方式一:使用普通方式转换,直接在mp函数类增加DataSet的列数。 这种方式使用的是Tuple()增加列
*
*  结果:未通过 (现在的scala是2.11 ,2.12以上版本没有试)
* */def fun1(ds1: Dataset[String],spark: SparkSession): Unit = {import spark.implicits._ds1.select("value").map { value =>val values = value.toString().split("#")//返回元组(元组有多少列,返回的就是多少列,最多能返回列, 实验结果是返回大于22列就会报错)//报错: too many elements for tuple: 25, allowed: 22(values(0), values(1), values(2), values(3), values(4), values(5), values(6), values(7), values(8),values(9), values(10), values(11), values(12), values(13), values(14), values(15), values(16),values(17), values(18), values(19), values(20), values(21),values(22),values(23),values(24))  //-- 25个字段的情况}.show()}//异常如下:
Error:(121, 9) too many elements for tuple: 25, allowed: 22(values(0), values(1), values(2), values(3), values(4), values(5), values(6), values(7), values(8),^

如上,在做map使用了Tuple对原有的数据列进行了扩张,但违反了默认tuple个数的设定,可以 用以下两种方式去解决。

  1. 让case class 继承Product,然后为DataSet增加列,
  2. 通过数组增加列,使用Array(n…)去获取
    具体代码如下:

1:继承Product方式扩展列

/*
*  // 方式二:使用 extends Product,然后为DataSet增加列,
*  实验结果:
*  报错:not enough arguments for method map: (implicit evidence
* */
def fun2(ds1: Dataset[String], spark: SparkSession): Unit = {val sqlContext = spark.sqlContextimport spark.implicits._//import sqlContext.implicits._println("方式二")ds1.map{value =>val values = value.toString().split("#")val pre = new PreTreatBean(values(0), values(1), values(2), values(3), values(4), values(5), values(6), values(7), values(8),values(9), values(10), values(11), values(12), values(13), values(14), values(15), values(16),values(17), values(18), values(19), values(20), values(21),values(22),values(23),values(24))pre}.show()
}
//定义case class
case class PreTreatBean(val A: String,val B: String,val C: String,val D: String,val E: String,val F: String,val G: String,val H: String,val I: String,val J: String,val K: String,val L: String,val M: String,val N: String,val O: String,val P: String,val Q: String,val R: String,val S: String,val T: String,val U: String,val V: String,val W: String,val X: String,val Y: String) extends Product  {
override def productArity = 25   //字段总数override def canEqual(that: Any) = that.isInstanceOf[this.type]override def productElement(n: Int):Any = n match {case 0 =>A  : Stringcase 1 => B : Stringcase 2 => C : Stringcase 3 => D : Stringcase 4 => E : Stringcase 5 => F : Stringcase 6 => G : Stringcase 7 => H : Stringcase 8 => I : Stringcase 9 => J : Stringcase 10 =>K : Stringcase 11 =>L : Stringcase 12 =>M : Stringcase 13 =>N : Stringcase 14 =>O : Stringcase 15 =>P : Stringcase 16 =>Q : Stringcase 17 =>R : Stringcase 18 =>S : Stringcase 19 =>T : Stringcase 20 =>U : Stringcase 21 =>V : Stringcase 22 =>W : Stringcase 23 =>X : Stringcase 24 =>Y : String
}
}

2: 使用数组扩张列`

  /**  // 方式三:数组传递数据,然后通过Array(0)...去获取*  实验结果:能够生产25列的表* */def fun3(ds1: Dataset[String], spark: SparkSession): Unit = {import spark.implicits._import org.apache.spark.sql.functions._val ds2 = ds1.select("value").map(value => {val values = value.toString()split("#")values})println("ds2+++++++++")ds2.show()println("============")ds2.select(col("value")(0) as "s0",col("value")(1) as "s1",col("value")(2) as "s2",col("value")(3) as "s31",col("value")(4) as "s41",col("value")(5) as "s51",col("value")(6) as "s61",col("value")(7) as "s71",col("value")(8) as "s81",col("value")(9) as "s91",col("value")(10) as "s11",col("value")(11) as "sa1",col("value")(12) as "sb1",col("value")(13) as "sc1",col("value")(14) as "sd1",col("value")(15) as "se1",col("value")(16) as "sf1",col("value")(17) as "sn1",col("value")(18) as "sm1",col("value")(19) as "ss1",col("value")(20) as "sss1",col("value")(21) as "st1",col("value")(22) as "sy1",col("value")(23) as "sl1",col("value")(24) as "sj1").select("s0").show()}

Spark SQL too many elements for tuple: 25 (scala tuple超过默认22个元素)相关推荐

  1. Spark SQL中的DataFrame

    在2014年7月1日的 Spark Summit 上,Databricks 宣布终止对 Shark 的开发,将重点放到 Spark SQL 上.在会议上,Databricks 表示,Shark 更多是 ...

  2. 「Spark从入门到精通系列」4.Spark SQL和DataFrames:内置数据源简介

    来源 |  Learning Spark Lightning-Fast Data Analytics,Second Edition 作者 | Damji,et al. 翻译 | 吴邪 大数据4年从业经 ...

  3. Spark SQL: Relational Data Processing in Spark

    Spark SQL: Relational Data Processing in Spark Spark SQL : Spark中关系型处理模块 说明: 类似这样的说明并非是原作者的内容翻译,而是本篇 ...

  4. spark sql on hive初探

    前一段时间由于shark项目停止更新,sql on spark拆分为两个方向,一个是spark sql on hive,另一个是hive on spark.hive on spark达到可用状态估计还 ...

  5. 快学Big Data -- Spark SQL总结(二十四)

    Spark  SQL 总结 概述 Spark  Sql 是用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用. 特点 spark  sql 要比 ...

  6. 【未完成】[Spark SQL_2] 在 IDEA 中编写 Spark SQL 程序

    0. 说明 在 IDEA 中编写 Spark SQL 程序,分别编写 Java 程序 & Scala 程序 1. 编写 Java 程序 待补充 2. 编写 Scala 程序 待补充 转载于:h ...

  7. Spark详解(十四):Spark SQL的Join实现

    1. 简介 Join是SQL语句中的常用操作,良好的表结构能够将数据分散在不同的表中,使其符合某种范式,减少表冗余.更新容错等.而建立表和表之间关系的最佳方式就是Join操作.Join连接是大数据处理 ...

  8. Spark SQL读数据库时不支持某些数据类型的问题(Timestamp with local Timezone)

    在大数据平台中,经常需要做数据的ETL,从传统关系型数据库RDBMS中抽取数据到HDFS中.之前开发数据湖新版本时使用Spark SQL来完成ETL的工作,但是遇到了 Spark SQL 不支持某些数 ...

  9. python使用spark sql查询impala_使用SparkSQL阅读Impala表

    我试图执行一个查询,该函数的功能类似于lead .. over ..分区和Union.当我试图在impala上运行它时,此查询效果很好,但在Hive上失败.使用SparkSQL阅读Impala表 我需 ...

最新文章

  1. 关于添加“服务引用”和“添加引用”的一点总结
  2. 创业的和想拿高薪的朋友可以看看,企业安全进行云平台运营的5个关键因素
  3. python导入同一文件夹下的类_python自定义模块
  4. 线性表的Java实现--链式存储(双向链表)
  5. 华为云MVP:来自工业制造领域的微服务与云平台实践
  6. keil uVision4 创建项目
  7. css3实现loading动画效果
  8. 计算机的管理员关机命令,电脑定时自动关机命令怎么使用?
  9. Spring Boot设置匹配指定后缀*.action *.do的路径
  10. office 2016安装包
  11. 牛客刷题——剑指offer
  12. 互联网大厂校招大战:华为研究生年薪最高到45万,腾讯offer数增四成
  13. 最优化理论与方法1--理论基础
  14. CDN 是什么 、CDN 引入
  15. [javascript|基本概念|Underfined]学习笔记
  16. 越豪华越危险 家装豪华程度与环境污染成正比
  17. 原生js实现点名册效果
  18. 立创EDA助力2021全国电赛数百万奖学金!
  19. 为什么OFDM抗多径?
  20. mysql 多表联合视图_MySQL之单表、多表查询、连接、视图

热门文章

  1. 华为5G基站日常维护操作手册(无线)
  2. TKmapper的更新方法updateByPrimaryKey()与updateByPrimaryKeySelective()
  3. 路由守卫 /路由拦截
  4. 2020年缓存Redis面试题与答案
  5. 热烈庆祝祖国成立70周年,2019国庆档大片《我和我的祖国》、《攀登者》、《中国机长》数据分析
  6. 基于Cisco OpenH264 的SIP 软电话
  7. 找个native老外润色_给我司老外技术总监润色PPT的一些感想
  8. 华为2014机试样题1: 计票统计 java实现
  9. 挑战杯三创互联网+创青春等创新创业类竞赛国家级作品案例模板全套资料分享
  10. itoa()函数与atoi()函数