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()
  • 相关阅读:
    快速排序和随机化快排学习
    P1330 封锁阳光大学 DFS
    P2577 [ZJOI2005]午餐 状压DP
    M. Subsequence 南昌邀请赛
    P1441 砝码称重 DFS回溯+DP
    P2661 信息传递 二分图的最小环
    P1196 [NOI2002]银河英雄传说 带权并查集
    P2024 [NOI2001]食物链 并查集
    F. Shovels Shop 背包DP
    P1514 引水入城 DFS
  • 原文地址:https://www.cnblogs.com/muyue123/p/13067049.html
Copyright © 2011-2022 走看看