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()
  • 相关阅读:
    xgzc— math 专题训练(一)
    floyd判圈算法
    CF961G Partitions
    luoguP4778 Counting swaps
    AT3913 XOR Tree(巧妙转换+状压dp)
    手动实现aop编程
    代理模式
    spring重点一:处理对象创建时间 个数以及方式
    spring helloword
    spring用来干什么,解决的问题
  • 原文地址:https://www.cnblogs.com/muyue123/p/13067049.html
Copyright © 2011-2022 走看看