我在HIVE / PySpark中有一个带有A,B和C列的表。 我想为每个列获取唯一值,如
{A: [1, 2, 3], B:[a, b], C:[10, 20]}
任何格式(数据框,表格等)
在HIVE或PySpark中如何有效(每列并行)执行操作?
我目前的方法是分别为每一列执行此操作,因此会花费大量时间。
答案 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]|
+---------+------+--------+