如何获取 HIVE/PySpark table 中每一列的唯一值?
How to get unique values for each column in HIVE/PySpark table?
我在 HIVE/PySpark 中有一个 table,其中包含 A、B 和 C 列。
我想为每一列获取唯一值,例如
{A: [1, 2, 3], B:[a, b], C:[10, 20]}
任何格式(数据帧、table 等)
如何在 HIVE 或 PySpark 中高效(每列并行)?
我目前的方法是分别对每一列执行此操作,因此会花费很多时间。
我们可以使用 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 中有一个 table,其中包含 A、B 和 C 列。 我想为每一列获取唯一值,例如
{A: [1, 2, 3], B:[a, b], C:[10, 20]}
任何格式(数据帧、table 等)
如何在 HIVE 或 PySpark 中高效(每列并行)?
我目前的方法是分别对每一列执行此操作,因此会花费很多时间。
我们可以使用 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]|
+---------+------+--------+