我在 PySpark 中使用数据框,我有以下任务:检查所有列中每列中有多少“次”值 > 2。对于 u1 来说它是 0,对于 u2 => 2 等等
user a b c d times
u1 1 0 1 0 0
u2 0 1 4 3 2
u3 2 1 7 0 1
Run Code Online (Sandbox Code Playgroud)
我的解决方案如下。它有效,我不确定这是最好的方法,并且还没有尝试过真正的大数据。我不喜欢转换为 rdd 并返回数据框。有更好的吗?我一开始想按每列的 UDF 进行计算,但没有找到一种方法来累加和总结每行的所有结果:
user a b c d times
u1 1 0 1 0 0
u2 0 1 4 3 2
u3 2 1 7 0 1
Run Code Online (Sandbox Code Playgroud)
对于这个解决方案,我使用了这个主题 如何将 numpy.array 作为新列添加到 pyspark.SQL DataFrame?
谢谢!
我尝试找到以下解决方案:
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)