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

时间:2017-08-07 22:30:17

标签: pyspark

我正在尝试在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秒才能运行,这是正常的吗?

非常感谢!

2 个答案:

答案 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]