Pyspark 获取多个列的不同值

Pyspark 获取多个列的不同值,pyspark,apache-spark-sql,Pyspark,Apache Spark Sql,我想从多个列中收集不同的值。 我可以这样做: for c in columns: values = dataframe.select(c).distinct().collect() 但这需要很多时间。是否有一种方法可以同时对所有列执行此操作?使用collect\u set从column函数中收集不同的值 DataFrame中的示例数据 >>> df.show() +---+---+---+ | a| b| c| +---+---+---+ | 1| 2| 3

我想从多个列中收集不同的值。 我可以这样做:

for c in columns:
   values = dataframe.select(c).distinct().collect()

但这需要很多时间。是否有一种方法可以同时对所有列执行此操作?

使用
collect\u set
column
函数中收集不同的值

DataFrame中的示例数据

>>> df.show()
+---+---+---+
|  a|  b|  c|
+---+---+---+
|  1|  2|  3|
|  2|  2|  4|
|  1|  3|  2|
|  4|  3|  3|
+---+---+---+
导入所需的函数

>>> from pyspark.sql.functions import collect_set
>>> from pyspark.sql.functions import col
collect\u set
函数用于收集
列中的不同值

>>> columnExprs = map(lambda c: collect_set(col(c)).alias(c),df.columns)
在选择中应用
columnExprs

>>> df.select(*columnExprs).show()
+---------+------+---------+
|        a|     b|        c|
+---------+------+---------+
|[1, 2, 4]|[2, 3]|[2, 3, 4]|
+---------+------+---------+
使用
collect
功能收集结果

>>> df.select(*columnExprs).collect()
[Row(a=[1, 2, 4], b=[2, 3], c=[2, 3, 4])]

如果可能的话,这种手术的结果会是什么样?这是一个很好的问题。:-)输出结果是什么?为什么不在一个过程中为所有想要的列运行它?我不知道如何运行。太好了,这正是我需要的。非常感谢你!