是否可以在Spark Data Frame中的GroupData上运行stat函数交叉表?

时间:2016-03-26 23:20:26

标签: python apache-spark dataframe pyspark apache-spark-sql

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

  • 我有一个DataFrame,其中包含3列A,B,C。
  • 我需要groupBy(A),而不是crosstab(B and C)groupBy(A)
  • 中按PySpark创建的每个群组运行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)

Pandas中的示例(我想在Spak数据框中创建):

In [12]: df
Out[12]: 
        A      B        C
0       AB    100       5
1       AB    200       5
2       AC    150       4
3       AC    500       5

更新:

A       B          C                       
AB      100        5     
        200        5
AC      150        4     
        500        5
AB

C    5 
B
100  1
200  1
对于AB和AC,应该是交叉表 类似的东西:

AC

C    5  4
B
150  0  1
500  1  0
int Tree::internalpathlength(BinTree* root_node, int curr_level){
int ipl;
if(root_node == NULL){
    return 0;
}
else if(root_node->colour == BLACK){
    ipl = (curr_level+internalpathlength(root_node->left,curr_level+1)+internalpathlength(root_node->right,curr_level+1));

}
return ipl;
}

任何想法怎么做?我可以'找到实施" for"的方法从这段代码 谢谢!

1 个答案:

答案 0 :(得分:3)

您可以尝试将AB合并为人工struct并将其用于crosstab

from pyspark.sql.functions import col, struct

df.withColumn("AB", struct("A", "B")).crosstab("AB", "C")