import org.apache.spark.ml.attribute.{Attribute, NumericAttribute}

import org.apache.spark.sql.SparkSession

import org.apache.spark.sql.types.StringType/**

* Created by shirukai on 2018/9/12

* 拆分列*/

objectSplitColTest {

def main(args: Array[String]): Unit={

val spark=SparkSession

.builder()

.appName(this.getClass.getSimpleName)

.master("local")

.getOrCreate()//从内存中创建DataFrame

import spark.implicits._

val df= Seq("Ming,20,15552211521", "hong,19,13287994007", "zhi,21,15552211523")

.toDF("value")

df.show()/**

* +-------------------+

* | value|

* +-------------------+

* |Ming,20,15552211521|

* |hong,19,13287994007|

* | zhi,21,15552211523|

* +-------------------+*/import org.apache.spark.sql.functions._//方法1: 使用内置函数split,然后遍历添加列

val separator = ","lazy val first=df.first()

val numAttrs=first.toString().split(separator).length

val attrs= Array.tabulate(numAttrs)(n => "col_" +n)//按指定分隔符拆分value列,生成splitCols列

var newDF = df.withColumn("splitCols", split($"value", separator))

attrs.zipWithIndex.foreach(x =>{

newDF= newDF.withColumn(x._1, $"splitCols".getItem(x._2))

})

newDF.show()/**

* +-------------------+--------------------+-----+-----+-----------+

* | value| splitCols|col_0|col_1| col_2|

* +-------------------+--------------------+-----+-----+-----------+

* |Ming,20,15552211521|[Ming, 20, 155522...| Ming| 20|15552211521|

* |hong,19,13287994007|[hong, 19, 132879...| hong| 19|13287994007|

* | zhi,21,15552211523|[zhi, 21, 1555221...| zhi| 21|15552211523|

* +-------------------+--------------------+-----+-----+-----------+*/

//方法2:使用udf函数创建多列,然后合并

val attributes: Array[Attribute] ={

val numAttrs=first.toString().split(separator).length//生成attributes

Array.tabulate(numAttrs)(i => NumericAttribute.defaultAttr.withName("value" + "_" +i))

}//创建多列数据

val fieldCols = attributes.zipWithIndex.map(x =>{

val assembleFunc=udf {

str: String=>str.split(separator)(x._2)

}

assembleFunc(df("value").cast(StringType)).as(x._1.name.get, x._1.toMetadata())

})//合并数据

df.select(col("*") +: fieldCols: _*).show()/**

* +-------------------+-------+-------+-----------+

* | value|value_0|value_1| value_2|

* +-------------------+-------+-------+-----------+

* |Ming,20,15552211521| Ming| 20|15552211521|

* |hong,19,13287994007| hong| 19|13287994007|

* | zhi,21,15552211523| zhi| 21|15552211523|

* +-------------------+-------+-------+-----------+*/}

}

spark 把一列数据合并_Spark DataFrame列的合并与拆分相关推荐

  1. pandas使用iloc函数基于dataframe数据列的索引抽取单列或者多列数据、其中多列索引需要嵌入在列表方括号[]中、或使用:符号形成起始和终止范围索引

    pandas使用iloc函数基于dataframe数据列的索引抽取单列或者多列数据.其中多列索引需要嵌入在列表方括号[]中.或使用:符号形成起始和终止范围索引 目录

  2. python分两列输出_Pandas实现一列数据分隔为两列

    分割成一个包含两个元素列表的列 对于一个已知分隔符的简单分割(例如,用破折号分割或用空格分割).str.split() 方法就足够了 . 它在字符串的列(系列)上运行,并返回列表(系列). >& ...

  3. Excel如何快速将多列数据复制到一列中

    今天跟大家分享一下Excel如何快速将多列数据复制到一列中 1.如下图是多列名单表,现在我们想要将这些名单数据转为一列显示. 2.首先我们选择名单数据单元格区域 3.然后点击下图选项(Excel工具箱 ...

  4. excle中根据一列数据匹配另一列数据

    excle中根据一列数据匹配另一列数据 #公式=INDEX(F:F,MATCH(A5,G:G,)) 1公式输入要填补的位置,C5 2根据G列内容,匹配A列内容,找出G列内容的对应的 返回 F列数据 3 ...

  5. dataframe两个表合并_Spark DataFrame 不是真正的 DataFrame

    从这篇文章开始,我们专栏开始一个新的读 paper 系列. 今天要介绍的 paper 是 Towards Scalable Dataframe Systems,目前还是预印本.作者 Devin Pet ...

  6. c语言讲两个数组合并_两列数据相互去掉重复值后合并

    大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并.这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等. 还是先看实例,下面的工作表中A列和 ...

  7. dataframe中将一列数据切分成多列

    为什么80%的码农都做不了架构师?>>>    原sheet中数据 目的 将[备注]列切分成[key]列和[value]列 Python sheet['key'] = sheet[' ...

  8. python dataframe取一列_python - 从pandas DataFrame列标题中获取列表

    python - 从pandas DataFrame列标题中获取列表 我想从pandas DataFrame中获取列标题列表. DataFrame将来自用户输入,因此我不知道将会有多少列或将调用它们. ...

  9. python excel增加一列_(用Python修改excel中一列数据)python新增一列

    python怎么从excel中读取数据? ⒈ #import παέτο import xlrd #Ρύθμι διαδρής path='C:\\Users\\jyjh\\Desktop\\data ...

最新文章

  1. Git 删除已经提交的文件(Delete commits from a branch in Git)
  2. python两个装饰器执行顺序_python中多个装饰器的执行顺序
  3. linux内核定时器使用
  4. 极光推送指定用户推送_干货|SpringBoot集成极光推送完整实现代码(建议收藏)...
  5. linux目录自动同步,Linux下rsync+inotify实现实时文件自动同步
  6. 解决Homebrew报错Error: Failure while executing; git clone https://github.com/Homebrew/homebrew-core....
  7. Carryon的字符串
  8. 【李宏毅2020 ML/DL】P4 Basic Concept
  9. python应用学习(五)——requests爬取网页图片
  10. arcgis-拓扑检查-model
  11. 基于Amos路径分析的模型修正与调整
  12. Springboot毕设项目电子竞技赛事管理系统f1v55java+VUE+Mybatis+Maven+Mysql+sprnig)
  13. 苏州大学 计算机网络,苏州大学计算机网络与通信期末考试卷-20210517192500.docx-原创力文档...
  14. C#实现jQuery的方法连缀
  15. 【转】WPF自定义控件与样式(13)-自定义窗体Window 自适应内容大小消息框MessageBox...
  16. 最全的软件测试面试题(含答案)
  17. 国产软件不背黑锅,4款强大又实用的电脑软件,用了舍不得卸载
  18. 什么是陀螺仪的dr算法_陀螺仪与加速传感器数据的融合算法解析
  19. python中geometry_python arcgis Geometry
  20. 清除浮动的几种方式,以及各自的优缺点

热门文章

  1. Jstatd命令 Java Statistics Monitoring Daemon
  2. VB讲课笔记14:二级VB知识点总结
  3. 解决Python shell中Delete-Backspace键乱码问题
  4. MyBatis框架笔记03:MyBatis实现CRUD
  5. 【BZOJ1912】【codevs1613】巡逻
  6. 【BZOJ4199】品酒大会,后缀数组+并查集维护
  7. 2017.9.26 货币兑换 失败总结
  8. TCP/IP 和 TCP/IP的 三/四次握手
  9. 数据图表与分析图_史上最全最实用的数据可视化分析图表制作工具汇总
  10. redid过期策略_Redis数据过期策略详解