如何获取 HIVE/PySpark 表中每一列的唯一值?

Posted

技术标签:

【中文标题】如何获取 HIVE/PySpark 表中每一列的唯一值?【英文标题】:How to get unique values for each column in HIVE/PySpark table? 【发布时间】:2018-07-18 05:35:02 【问题描述】:

我在 HIVE/PySpark 中有一个包含 A、B 和 C 列的表。 我想为每个列获取唯一值,例如

A: [1, 2, 3], B:[a, b], C:[10, 20]

任何格式(数据框、表格等)

如何在 HIVE 或 PySpark 中有效地(每列并行)执行此操作?

我目前的方法是分别对每一列执行此操作,因此需要很多时间。

【问题讨论】:

【参考方案1】:

我们可以使用pyspark.sql.functions模块中的collect_set()

>>> df = spark.createDataFrame([(1,'a',10),(2,'a',20),(3,'b',10)],['A','B','C'])
>>> df.show()
+---+---+---+
|  A|  B|  C|
+---+---+---+
|  1|  a| 10|
|  2|  a| 20|
|  3|  b| 10|
+---+---+---+

>>> from pyspark.sql import functions as F
>>> df.select([F.collect_set(x).alias(x) for x in df.columns]).show()
+---------+------+--------+
|        A|     B|       C|
+---------+------+--------+
|[1, 2, 3]|[b, a]|[20, 10]|
+---------+------+--------+

【讨论】:

以上是关于如何获取 HIVE/PySpark 表中每一列的唯一值?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何读取数据库表中每一列的数据分别赋值给数组

利用pandas和numpy计算表中每一列的均值

jsp如何取到选中的radio中每一列的值

获取pandas数据框中每一列的前k个元素的索引的快速方法

视图中每一列的源列是啥

如何计算熊猫数据框中每一列的唯一性?