码迷,mamicode.com
首页 > 其他好文 > 详细

dataframe行变换为列

时间:2018-09-28 12:48:52      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:oar   index   spl   content   pac   实现   fun   分割   amp   

新建一个 dataFrame

val conf = new SparkConf().setAppName("TTyb").setMaster("local")
val sc = new SparkContext(conf)
val spark: SQLContext = new SQLContext(sc)
import org.apache.spark.sql.functions.explode
import org.apache.spark.sql.functions.split
import spark.implicits._
val dataFrame = spark.createDataFrame(Seq(
  (1, "example1", "a|b|c"),
  (2, "example2", "d|e")
)).toDF("id", "name", "content")

需要将 content 的内容按照 | 分割,得到如下效果:

+---+--------+-------+
| id|    name|content|
+---+--------+-------+
|  1|example1|      a|
|  1|example1|      b|
|  1|example1|      c|
|  2|example2|      d|
|  2|example2|      e|
+---+--------+-------+

目前有两种方式实现。

方式一

使用 import org.apache.spark.sql.functions 里面的函数,具体的方式可以看 functions

import org.apache.spark.sql.functions.{explode,split}
import spark.implicits._
dataFrame.withColumn("content", explode(split($"content", "[|]"))).show

方式二

使用 udf ,具体的方式可以看 spark使用udf给dataFrame新增列

import org.apache.spark.sql.functions.explode
val stringtoArray =org.apache.spark.sql.functions.udf((content : String) => {content.split('|')})
dataFrame.withColumn("content", explode(stringtoArray(dataFrame("content")))).show

dataframe行变换为列

标签:oar   index   spl   content   pac   实现   fun   分割   amp   

原文地址:https://www.cnblogs.com/TTyb/p/9717439.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!