【发布时间】:2018-07-18 05:35:02
【问题描述】:
我在 HIVE/PySpark 中有一个包含 A、B 和 C 列的表。 我想为每个列获取唯一值,例如
{A: [1, 2, 3], B:[a, b], C:[10, 20]}
任何格式(数据框、表格等)
如何在 HIVE 或 PySpark 中有效地(每列并行)执行此操作?
我目前的方法是分别对每一列执行此操作,因此需要很多时间。
【问题讨论】:
标签: hive pyspark pyspark-sql
我在 HIVE/PySpark 中有一个包含 A、B 和 C 列的表。 我想为每个列获取唯一值,例如
{A: [1, 2, 3], B:[a, b], C:[10, 20]}
任何格式(数据框、表格等)
如何在 HIVE 或 PySpark 中有效地(每列并行)执行此操作?
我目前的方法是分别对每一列执行此操作,因此需要很多时间。
【问题讨论】:
标签: hive pyspark pyspark-sql
我们可以使用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]|
+---------+------+--------+
【讨论】: