是否可以在Spark Data Frame中的GroupData上运行统计信息功能交叉表?

fee*_*hka 1 python dataframe apache-spark apache-spark-sql pyspark

我尝试找到以下解决方案:

  • 我有一个DataFrame带有3列的A,B,C。
  • 我需要groupBy(A)比运行crosstab(B and C)每每个被装箱组groupBy(A)PySpark

熊猫中的示例(我想在Spak Data Frame中创建的示例):

grouped = df.groupby('A')
for name, group in grouped:
    df_crossed = pd.crosstab(group['B'],group['C'])
    df_crossed = (df_crossed>0).astype(int)
    df_result[name] = df_crossed.mean(axis=1).max(axis=0)
Run Code Online (Sandbox Code Playgroud)

更新:

In [12]: df
Out[12]: 
        A      B        C
0       AB    100       5
1       AB    200       5
2       AC    150       4
3       AC    500       5
Run Code Online (Sandbox Code Playgroud)
A       B          C                       
AB      100        5     
        200        5
AC      150        4     
        500        5
Run Code Online (Sandbox Code Playgroud)

应该是AB和AC的交叉表,例如:

AB

C    5 
B
100  1
200  1
Run Code Online (Sandbox Code Playgroud)
AC

C    5  4
B
150  0  1
500  1  0
Run Code Online (Sandbox Code Playgroud)

有什么想法怎么做?我无法从此代码中找到实现“ for”的方法,谢谢!

zer*_*323 5

你可以尝试合并A,并B为人工struct并将其用于crosstab

from pyspark.sql.functions import col, struct

df.withColumn("AB", struct("A", "B")).crosstab("AB", "C")
Run Code Online (Sandbox Code Playgroud)