假设我们正在使用以下数据表示(两列,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)`。
你要求一个“pyspark dataframe替代pandas df['col'].unique()”。现在,给定以下Spark dataframe:
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 for i in s_df.select('k').distinct().collect()]
Row
对象的列表,您需要使用类似于此答案中的列表推导式:https://dev59.com/EFkS5IYBdhLWcg3w25sM#60896261 - Ric Spyspark_df.select(target_column_name).distinct().toPandas()[target_column_name].to_list()
将返回一个扁平的 Python 列表。 - Bikash Gyawalipyspark_df.select(target_column_name).distinct().rdd.flatMap(list).collect()
- undefined