我正在尝试在Pyspark中的数据框中获取列的不同值,将它们保存在列表中,此时列表包含“Row(no_children = 0)” 但我只需要这个值,因为我会将它用于代码的另一部分。
所以,理想情况下只有all_values = [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秒才能运行,这是正常的吗?
非常感谢!
答案 0 :(得分:0)
您可以执行以下操作以仅获取值
list = [r.no_children for r in all_values]
list
[0, 1, 2, 3, 4]
答案 1 :(得分:0)
您可以使用函数模块中的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]