小编fee*_*hka的帖子

计算每行并在 DataFrame PySpark 中添加新列 - 更好的解决方案?

我在 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 apache-spark rdd apache-spark-sql pyspark

3
推荐指数
1
解决办法
3595
查看次数

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

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

  • 我有一个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)

python dataframe apache-spark apache-spark-sql pyspark

1
推荐指数
1
解决办法
1979
查看次数