如何使用PySpark将列转换为行

时间:2017-05-24 05:20:59

标签: pyspark pivot transpose

我正在尝试将我桌子的某些列转换为行。我找到了上一篇文章:Transpose column to row with Spark

我实际上想要相反的方式。最初,我有:

+-----+--------+-----------+   
|  A  | col_id | col_value |  
+-----+--------+-----------+  
|  1  |   col_1|        0.0|  
|  1  |   col_2|        0.6|       
|  ...|     ...|        ...|        
|  2  |   col_1|        0.6|  
|  2  |   col_2|        0.7|   
|  ...|     ...|        ...|      
|  3  |   col_1|        0.5|  
|  3  |   col_2|        0.9|  
|  ...|     ...|        ...|  

我想要的是:

+-----+-----+-----+-------+  
|  A  |col_1|col_2|col_...|  
+-----+-------------------+  
|  1  |  0.0|  0.6|  ...  |  
|  2  |  0.6|  0.7|  ...  |  
|  3  |  0.5|  0.9|  ...  |  
|  ...|  ...|  ...|  ...  |  

我该怎么办?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用'when'来模拟SQL CASE之类的语句,使用该语句在列上重新分配数据,如果'colid'是'col2'并且您正在计算col1,则只需输入0。 在那之后用简单的总和减少行数。

from pyspark.sql import functions as F  
df2=df.select(df.A, F.when(df.colid=='col_1', df.colval).otherwise(0).alias('col1'),F.when(df.colid=='col_2', df.colval)\
          .otherwise(0).alias('col2'))

df2.groupBy(df.A).agg(F.sum("col1").alias('col1'),\
F.sum("col2").alias('col2')).show()