将Pyspark中数据帧中的不同值转换为列表

将Pyspark中数据帧中的不同值转换为列表,pyspark,Pyspark,我试图在Pyspark中获取数据帧中列的不同值,以便将它们保存在列表中,此时列表包含“Row(no_children=0)” 但是我只需要这个值,因为我将在代码的另一部分使用它 因此,理想情况下,只有所有的_值=[0,1,2,3,4] all_values=sorted(list(df1.select('no_children').distinct().collect())) all_values [Row(no_children=0), Row(no_children=1), Row(

我试图在Pyspark中获取数据帧中列的不同值,以便将它们保存在列表中,此时列表包含“Row(no_children=0)” 但是我只需要这个值,因为我将在代码的另一部分使用它

因此,理想情况下,只有所有的_值=[0,1,2,3,4]

all_values=sorted(list(df1.select('no_children').distinct().collect()))
all_values


[Row(no_children=0),
 Row(no_children=1),
 Row(no_children=2),
 Row(no_children=3),
 Row(no_children=4)]
运行大约需要15秒,这正常吗


多谢各位

您可以这样做,只获取值

list = [r.no_children for r in all_values]

list
[0, 1, 2, 3, 4]

您可以使用函数模块中的collect_set来获取列的不同值

from pyspark.sql import functions as F
>>> df1.show()
+-----------+
|no_children|
+-----------+
|          0|
|          3|
|          2|
|          4|
|          1|
|          4|
+-----------+

>>> df1.select(F.collect_set('no_children').alias('no_children')).first()['no_children']
[0, 1, 2, 3, 4]

太棒了,这个选项更快。尽管命令行打印WARN TaskSetManager:Stage 849包含一个非常大的任务(165 KB)。建议的最大任务大小为100 KB。这通常发生在从驱动程序向执行程序传输大量列表时,或者由于数据的分区。请检查这个,无论如何,希望这个答案对你有帮助。如果你同意的话,你能接受吗?我看过那篇文章,但不知道该怎么办,但谢谢!