在 pyspark 数据框中显示不同的列值

新手上路,请多包涵

使用 pyspark 数据框,你如何做相当于 Pandas df['col'].unique()

我想列出 pyspark 数据框列中的所有唯一值。

不是 SQL 类型的方式(registertemplate 然后 SQL 查询不同的值)。

另外我不需要 groupby 然后 countDistinct ,而是我想检查该列中的不同值。

原文由 Satya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 860
2 个回答

假设我们正在使用以下数据表示形式(两列 kv ,其中 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()]

原文由 eddies 发布,翻译遵循 CC BY-SA 3.0 许可协议

这应该有助于获得列的不同值:

 df.select('column1').distinct().collect()

请注意 .collect() 没有任何内置限制可以返回多少值,因此这可能很慢 - 使用 .show() 代替或添加 .limit(20) .collect() 管理这个。

原文由 Pabbati 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题