Pyspark如何进行groupby计数的反转?

64jmpszr  于 2022-12-03  发布在  Spark
关注(0)|答案(1)|浏览(101)

输入 Dataframe :

| 等级|男性计数|女数|
| - -|- -|- -|
| A级|2个|一个|
| B|三个|一个|
| C语言|第0页|三个|
| D级|2个|四个|

预期输出 Dataframe :

| 类别|性别问题|
| - -|- -|
| A级|米|
| A级|米|
| B|米|
| B|米|
| B|米|
| D级|米|
| D级|米|
| A级|关闭|
| B|关闭|
| C语言|关闭|
| C语言|关闭|
| C语言|关闭|
| D级|关闭|
| D级|关闭|
| D级|关闭|
| D级|关闭|

xytpbqjk

xytpbqjk1#

您可以为每个类创建male和female数组,然后分解它。
参见下面示例

data_sdf. \
    withColumn('male_arr', func.expr('concat_ws(",", array_repeat("m", cast(malecount as int)))')). \
    withColumn('female_arr', func.expr('concat_ws(",", array_repeat("f", cast(femalecount as int)))')). \
    withColumn('male_female', func.concat_ws(',', 
                                             func.expr('if(male_arr="", null, male_arr)'), 
                                             func.expr('if(female_arr="", null, female_arr)')
                                             )
               ). \
    selectExpr('class', 'explode(split(male_female, ",")) as gender'). \
    show()

# +-----+------+
# |class|gender|
# +-----+------+
# |    A|     m|
# |    A|     m|
# |    A|     f|
# |    B|     m|
# |    B|     m|
# |    B|     m|
# |    B|     f|
# |    C|     f|
# |    C|     f|
# |    C|     f|
# |    D|     m|
# |    D|     m|
# |    D|     f|
# |    D|     f|
# |    D|     f|
# |    D|     f|
# +-----+------+

相关问题