在pyspark中创建多个字段作为数组?

tquggr8v  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(390)

我有一个包含多个列的Dataframe:

| ID | Grouping | Field_1 | Field_2 | Field_3 | Field_4 |
|----|----------|---------|---------|---------|---------|
| 1  | AA       | A       | B       | C       | M       |
| 2  | AA       | D       | E       | F       | N       |

我想创建2个新列,并在现有字段上使用groupby在新字段中存储现有列的列表。这样,我的新Dataframe将如下所示:

| ID | Grouping | Group_by_list1 | Group_by_list2 |
|----|----------|----------------|----------------|
| 1  | AA       | [A,B,C,M]      | [D,E,F,N]      |

pyspark是否有办法处理这种与Dataframe的争用以创建这种预期结果?

gr8qqesn

gr8qqesn1#

添加了内联注解,请检查下面的代码。

df \ 
.select(F.col("id"),F.col("Grouping"),F.array(F.col("Field_1"),F.col("Field_2"),F.col("Field_3"),F.col("Field_4")).as("grouping_list"))\ # Creating array of required columns.
.groupBy(F.col("Grouping"))\  # Grouping based on Grouping column.
.agg(F.first(F.col("id")).alias("id"),F.first(F.col("grouping_list")).alias("Group_by_list1"),F.last(F.col("grouping_list")).alias("Group_by_list2"))\ # first value from id, first value from grouping_list list, last value from grouping_list
.select("id","Grouping","Group_by_list1","Group_by_list2")\ # selecting all columns.
.show(false)

+---+--------+--------------+--------------+
|id |Grouping|Group_by_list1|Group_by_list2|
+---+--------+--------------+--------------+
|1  |AA      |[A, B, C, M]  |[D, E, F, N]  |
+---+--------+--------------+--------------+

注:只有当 DataFrame 有两排。

相关问题