【问题标题】:Hive/pyspark: pivot non numeric data for huge datasetHive / pyspark:为大型数据集提供非数字数据
【发布时间】:2021-11-14 06:54:49
【问题描述】:

我正在寻找一种方法来在 hive 或 pyspark 中使用以下结构旋转输入数据集,输入包含超过 50 亿条记录,并且每个 emp_id 可能有 8 行和 5 列,所以我会最终有 40 列。我确实参考了this link,但是这里的数据集中已经有旋转输出列,在我的不是,我也试过this link,但是sql变得非常大(没关系),但是有没有在需要将结果旋转列与排名连接的地方有很多方法。

输入

emp_id,  dept_id,   dept_name, rank
1001,   101,        sales,      1
1001,   102,        marketing,  2
1002    101,        sales       1
1002    102,        marketing,  2

预期输出

emp_id,     dept_id_1, dept_name_1, dept_id_2, dept_id_2
1001,       101,        sales,      102,        marketing
1002,       101,        sales,      102,        marketing

【问题讨论】:

    标签: pyspark hive pivot


    【解决方案1】:

    您可以在透视后使用聚合,您可以选择像这样重命名列

    import pyspark.sql.functions as F
    
    (df
        .groupBy('emp_id')
        .pivot('rank')
        .agg(
            F.first('dept_id').alias('dept_id'),
            F.first('dept_name').alias('dept_name')
        )
        .show()
    )
    
    # Output
    # +------+---------+-----------+---------+-----------+
    # |emp_id|1_dept_id|1_dept_name|2_dept_id|2_dept_name|
    # +------+---------+-----------+---------+-----------+
    # |  1002|      101|      sales|      102|  marketing|
    # |  1001|      101|      sales|      102|  marketing|
    # +------+---------+-----------+---------+-----------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-13
      • 2018-04-22
      • 2018-10-05
      • 2021-06-06
      • 2011-04-18
      • 2017-10-10
      • 2017-10-08
      • 1970-01-01
      相关资源
      最近更新 更多