我在hive/pyspark中有一个表,有a、b和c列。我想得到每个列的唯一值,比如
{A: [1, 2, 3], B:[a, b], C:[10, 20]}
任何格式(Dataframe、表格等)如何在hive或pyspark中高效地实现这一点(对每个列并行)?我目前的方法是对每一列单独进行,因此需要花费大量时间。
zu0ti5jz1#
我们可以用 collect_set() 从 pyspark.sql.functions 模块,
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]| +---------+------+--------+
1条答案
按热度按时间zu0ti5jz1#
我们可以用
collect_set()
从pyspark.sql.functions
模块,