如何转换Spark数据帧以使我的值成为列名?

时间:2018-03-02 05:17:00

标签: scala apache-spark apache-spark-sql

我不确定用这句话来表达问题的好方法,但是一个例子会有所帮助。以下是我对列的数据框:名称,类型和计数:

import csv
with open('chicago.csv', newline='') as csv_file:
   reader = list(csv.DictReader(csv_file, skipinitialspace=True))

我想获得一个像这样结构化的新数据框,其中Type列值已成为新列:

+------+------+-------+
| Name | Type | Count |
+------+------+-------+
| a    |    0 |     5 |
| a    |    1 |     4 |
| a    |    5 |     5 |
| a    |    4 |     5 |
| a    |    2 |     1 |
| b    |    0 |     2 |
| b    |    1 |     4 |
| b    |    3 |     5 |
| b    |    4 |     5 |
| b    |    2 |     1 |
| c    |    0 |     5 |
| c    |  ... |   ... |
+------+------+-------+

这里的列是[Name,0,1,2,3,4,5]。

1 个答案:

答案 0 :(得分:2)

使用Spark中的<h1 class="main-text" id="one">text</h1> <br/> <h1 class="main-text" id="two">texttextext</h1> <br/> <h1 class="main-text" id="three">texttextexttexttextext</h1>函数执行此操作。

pivot

这里,如果两行的名称和类型相同,则只需将计数值加在一起,但也可以进行其他聚合。

在问题中使用示例数据时产生的数据帧:

val df2 = df.groupBy("Name").pivot("Type").sum("Count")