在Pyspark中使用collect_list函数可以创建嵌套列表。collect_list函数用于将一个列的值收集到一个列表中,并返回一个包含所有值的嵌套列表。
下面是在窗口上使用collect_list函数在Pyspark中创建嵌套列表的步骤:
from pyspark.sql import SparkSession
from pyspark.sql.functions import collect_list, struct
from pyspark.sql.window import Window
spark = SparkSession.builder.getOrCreate()
data = [("Alice", "Math", 90),
("Alice", "Science", 95),
("Bob", "Math", 80),
("Bob", "Science", 85),
("Bob", "English", 75)]
df = spark.createDataFrame(data, ["Name", "Subject", "Score"])
windowSpec = Window.partitionBy("Name")
df = df.withColumn("Subjects", collect_list(struct("Subject", "Score")).over(windowSpec))
在上述代码中,首先使用Window.partitionBy函数指定按照"Name"列进行分区。然后,使用collect_list和struct函数将"Subject"和"Score"列的值收集到一个结构体中。最后,使用over函数将collect_list应用于窗口。
df.show(truncate=False)
运行上述代码后,将会得到以下结果:
+-----+-------+-----+----------------------------------+
|Name |Subject|Score|Subjects |
+-----+-------+-----+----------------------------------+
|Alice|Math |90 |[[Math, 90], [Science, 95]] |
|Alice|Science|95 |[[Math, 90], [Science, 95]] |
|Bob |Math |80 |[[Math, 80], [Science, 85], [Eng...|
|Bob |Science|85 |[[Math, 80], [Science, 85], [Eng...|
|Bob |English|75 |[[Math, 80], [Science, 85], [Eng...|
+-----+-------+-----+----------------------------------+
在结果中,"Subjects"列包含了每个学生的科目和分数的嵌套列表。
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云