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

时间:2018-07-18 05:35:02

标签: hive pyspark pyspark-sql

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

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

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

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

我目前的方法是分别为每一列执行此操作,因此会花费大量时间。

1 个答案:

答案 0 :(得分:4)

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

>>> 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]|
+---------+------+--------+