dataframe行变换为列

Posted ttyb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dataframe行变换为列相关的知识,希望对你有一定的参考价值。

新建一个 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行变换为列的主要内容,如果未能解决你的问题,请参考以下文章

将作为字典的 pd DataFrame 行分隔为列

5 Dataframe的函数应用

使用 Pandas DataFrame 样式为列着色(Python 3)

如何在 SQL Server 或 C# 代码中将行转换为列

在实体框架中将行转换为列

跨 PySpark DataFrame 列的字符串匹配