zoukankan      html  css  js  c++  java
  • 行列变换的相关

    PIVOT

    用户将多行转换成列。如果需要转换特定的行,则将行的值做为列表参数传入。

    from pyspark.sql import SparkSession
    import pyspark.sql.functions as F

    spark = SparkSession.builder.master("local[*]").appName("PythonWordCount").config("spark.driver.host", "localhost").getOrCreate()

    df = spark.createDataFrame([('数学', '张三', 88), ('语文', '张三', 92), ('英语', '张三', 77),
    ('数学', '王五', 65), ('语文', '王五', 87), ('英语', '王五', 90),
    ('数学', '李雷', 67), ('语文', '李雷', 33), ('英语', '李雷', 24),
    ('数学', '宫九', 77), ('语文', '宫九', 87), ('英语', '宫九', 90)
    ], ['subject', 'name', 'score'])

    df.groupBy("subject").pivot("name").agg(F.sum("score").alias("sum")).show()

    #另外的写法
    df.groupBy("cat").pivot("name",["张三","王五"]).sum("score").show()
    转换特定的行
    #df.groupBy("subject").pivot("name",["张三","王五"]).agg(F.sum("score").alias("sum")).show()

    concat_ws

    用于连接,需要指定连接的字符串。一般配合collect_list或者collect_set使用。

    df.createOrReplaceTempView("t1")

    spark.sql("select subject,concat_ws('--->',collect_set(name)) from t1 group by subject").show()

    lateral view

    用于将列表字段展开,和explode一起使用。

    df = spark.createDataFrame([('a', [1, 2, 3],['x','y']), ('b', [5, 2, 3],['x','y'])], ['id', 'c1','c2'])
    df.show()
    df.createOrReplaceTempView('t1')
    spark.sql('select id,c1_1,c2_1 from t1 '
              'lateral view explode(c1) a as c1_1 '
              'lateral view explode(c2) b as c2_1 '
              ).show()
    #另外一种方式,但只允许有一个explode语句

    spark.sql('select id, explode(c1) a from t1').show()
  • 相关阅读:
    linux ssh免密
    flink WaterMark之TumblingEventWindow
    flink 并行计数器实现
    VSCode删除重复的空行
    Gnome添加Open with Code菜单
    Linux下设置VSCode为默认的文本编辑器
    Jupyter Notebook添加Ruby支持
    Linux下无法运行Color picker
    oh-my-zsh: bracketed-paste-magic:zle:47: not enough arguments for -U
    Vim auto-pairs设置选项
  • 原文地址:https://www.cnblogs.com/muyue123/p/13067049.html
Copyright © 2011-2022 走看看