zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    linux中如何修改文件夹的用户权限 chown命令
    httpserver
    协程
    进程和线程的区别和联系
    python线程的GIL问题(全局解释器锁)
    线程同步互斥的方法
    threading模块创建线程
    信号量(信号灯)
    信号通道
    内存共享
  • 原文地址:https://www.cnblogs.com/TTyb/p/9717439.html
Copyright © 2011-2022 走看看