如何为hive/pyspark表中的每列获取唯一值?

piok6c0g  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(683)

我在hive/pyspark中有一个表,有a、b和c列。我想得到每个列的唯一值,比如

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

任何格式(Dataframe、表格等)
如何在hive或pyspark中高效地实现这一点(对每个列并行)?
我目前的方法是对每一列单独进行,因此需要花费大量时间。

zu0ti5jz

zu0ti5jz1#

我们可以用 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]|
+---------+------+--------+

相关问题