Hive 在多个列上独立分组

Hive 在多个列上独立分组,hive,pyspark,pyspark-sql,pyspark-dataframes,Hive,Pyspark,Pyspark Sql,Pyspark Dataframes,我有一个数据框,其中有2列 dataframe 1:- product | act a | A b | B c | C d | D b | C a | D 我希望输出如下所示: product act product_count act_count2 a A 2 1 b B

我有一个数据框,其中有2列

  dataframe 1:-

  product | act
    a     |  A
    b     |  B
    c     |  C
    d     |  D
    b     |  C
    a     |  D
我希望输出如下所示:

   product   act   product_count   act_count2
     a        A       2               1
     b        B       2               1
     c        C       1               2
     d        D       1               2

我想对每一列进行单独计数。

您可以通过在Pyspark中使用窗口来实现这一点

下面是伪代码(我没有运行它,但您的代码如下所示)

假设您正在使用数据帧(df)


您可以通过在Pyspark中使用窗口来实现这一点

下面是伪代码(我没有运行它,但您的代码如下所示)

假设您正在使用数据帧(df)

您可以将df.select()用作
df\u count=df.select([F.count(df[col]).over(Window.partitionBy(col)).alias({}\u count.format(col))用于df.columns中的col])

您可以使用df.select()作为
df\u count=df.select([F.count(df[col])over(Window.partitionBy(col)).alias(“{}\u count.format(col))for col in df.columns])

如何使此动态,因为在我的例子中,列有时是不固定的,它有3列或4列。@ravi malhotrayou必须将这些列存储在一个列表中,然后根据该列表进行分组。然后,您需要编写一个列表来在每列上生成Window.partitionBy。之后,您可以使用windows createdHow编写另一个列表理解以应用withColumn操作,使其成为动态的,因为在我的情况下,列有时不是固定的,它有3列或4列。@ravi malhotrayou必须将列存储在您要分组的列表中。然后,您需要编写一个列表来在每列上生成Window.partitionBy。之后,您可以使用创建的窗口编写另一个列表理解以应用withColumn操作
from pyspark.sql.window import Window
from pyspark.sql import functions as F

w = Window.partitionBy('product')
w1 = Window.partitionBy('act')

df.withColumn('product_count', F.count('product').over(w)).withColumn('act_count', F.count('act').over(w1))

df.show()