假设我们正在使用以下数据表示形式(两列,k 和 v,其中 k 包含三个条目,两个唯一的:
+---+---+
| k| v|
+---+---+
|foo| 1|
|bar| 2|
|foo| 3|
+---+---+
使用 Pandas 数据框:
import pandas as pd
p_df = pd.DataFrame([("foo", 1), ("bar", 2), ("foo", 3)], columns=("k", "v"))
p_df['k'].unique()
这会返回一个ndarray,即array(['foo', 'bar'], dtype=object)
您要求提供“pandas df['col'].unique() 的 pyspark 数据框替代方案”。现在,给定以下 Spark 数据帧:
s_df = sqlContext.createDataFrame([("foo", 1), ("bar", 2), ("foo", 3)], ('k', 'v'))
如果您希望 Spark 的结果相同,即ndarray,请使用toPandas():
s_df.toPandas()['k'].unique()
或者,如果您不需要专门的 ndarray 并且只想要列 k 的唯一值的列表:
s_df.select('k').distinct().rdd.map(lambda r: r[0]).collect()
最后,您还可以使用列表推导式,如下所示:
[i.k for i in s_df.select('k').distinct().collect()]