【问题标题】:Pivot in pySpark在 pySpark 中旋转
【发布时间】:2018-12-14 09:11:52
【问题描述】:

我有一个数据框:

student_id class score
1 A 6
1 B 7
1 C 8

我想将class 分数分成 3 列,所以上面的数据框应该变成:

student_id class_A_score class_B_score class_C_score
1 6 7 8

这个想法是将A B C转换成3列。

【问题讨论】:

  • @eliasah 你能帮我看看 OP 的问题和你提供的链接之间的相似之处吗?
  • @eliasah 我对你提到的方法持怀疑态度,请看看这个问题的答案是否是你所指的。
  • 我错过了阅读@RahulChawla 的问题

标签: pyspark


【解决方案1】:
values = [(1,'A',6),(1,'B',7),(1,'C',8)]
df = sqlContext.createDataFrame(values,['student_id','class','score'])
df.show()
+----------+-----+-----+
|student_id|class|score|
+----------+-----+-----+
|         1|    A|    6|
|         1|    B|    7|
|         1|    C|    8|
+----------+-----+-----+
df = df.groupBy(["student_id"]).pivot("class").sum("score")
df.show()
+----------+---+---+---+
|student_id|  A|  B|  C|
+----------+---+---+---+
|         1|  6|  7|  8|
+----------+---+---+---+

【讨论】:

    【解决方案2】:

    这是枢轴的经典示例。在 pyspark 中,如果 df 是您的数据框:

    new_df = df.groupBy(['student_id']).pivot('class').sum(score)
    

    Databricks 在https://databricks.com/blog/2016/02/09/reshaping-data-with-pivot-in-apache-spark.html 上有很好的说明

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2022-01-04
      相关资源
      最近更新 更多