我尝试找到以下解决方案:
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"的方法从这段代码 谢谢!
答案 0 :(得分:3)
您可以尝试将A
和B
合并为人工struct
并将其用于crosstab
:
from pyspark.sql.functions import col, struct
df.withColumn("AB", struct("A", "B")).crosstab("AB", "C")