将重复值透视到 2 个不同的列中
Pivot duplicate values into 2 different columns
我将以下数据导入到 PySpark 数据框中:
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
spark = SparkSession.builder.master("local[4]").appName("pyspark").getOrCreate()
df = spark.read.csv("example.csv")
df.show()
#+--+------+
#|id|answer|
#+--+------+
#| 1|a |
#| 1|b |
#| 2|c |
#| 2|d |
#| 3|e |
#| 4|f |
#| 4|g |
#+--+------+
有些 ID 可能重复,有些可能没有。
我想要以下输出:
+--+------+------+
|id|first |second|
+--+------+------+
| 1|a |b |
| 2|c |d |
| 3|e |Null |
| 4|f |g |
+--+------+------+
我会使用 groupBy
并使用 collect_list
进行聚合。我添加了 array_sort
只是为了更加确定性。
from pyspark.sql import functions as F
df = df.groupBy('id').agg(F.array_sort(F.collect_list('answer')).alias('list'))
df = df.select(
'id',
F.element_at('list', 1).alias('first'),
F.element_at('list', 2).alias('second'),
)
df.show()
# +---+-----+------+
# | id|first|second|
# +---+-----+------+
# | 1| a| b|
# | 2| c| d|
# | 3| e| null|
# | 4| f| g|
# +---+-----+------+
我将以下数据导入到 PySpark 数据框中:
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
from pyspark.sql.types import *
spark = SparkSession.builder.master("local[4]").appName("pyspark").getOrCreate()
df = spark.read.csv("example.csv")
df.show()
#+--+------+
#|id|answer|
#+--+------+
#| 1|a |
#| 1|b |
#| 2|c |
#| 2|d |
#| 3|e |
#| 4|f |
#| 4|g |
#+--+------+
有些 ID 可能重复,有些可能没有。 我想要以下输出:
+--+------+------+
|id|first |second|
+--+------+------+
| 1|a |b |
| 2|c |d |
| 3|e |Null |
| 4|f |g |
+--+------+------+
我会使用 groupBy
并使用 collect_list
进行聚合。我添加了 array_sort
只是为了更加确定性。
from pyspark.sql import functions as F
df = df.groupBy('id').agg(F.array_sort(F.collect_list('answer')).alias('list'))
df = df.select(
'id',
F.element_at('list', 1).alias('first'),
F.element_at('list', 2).alias('second'),
)
df.show()
# +---+-----+------+
# | id|first|second|
# +---+-----+------+
# | 1| a| b|
# | 2| c| d|
# | 3| e| null|
# | 4| f| g|
# +---+-----+------+