PySpark获取DataFrame单列唯一值并转NumPy数组报错求助
获取PySpark DataFrame列唯一值的正确方法
你用F.array_distinct的思路错了——这个函数是用来对数组类型的列去重(比如某一列存的是[1,2,2,3],用它会变成[1,2,3]),不是对整个列的行去重,而且它返回的是Column对象,collect()、toPandas()这些是DataFrame的方法,自然会报错。
下面是两种正确的实现方式:
方法1:直接去重后收集为Row列表
先选中目标列,对列的行去重,再收集结果:
# 获取去重后的Row对象列表 unique_rows = my_spark_df.select("my_column").distinct().collect() # 如果要转成Python原生列表 unique_values = [row.my_column for row in unique_rows]
方法2:聚合为数组后提取
用collect_set聚合函数直接把列的所有唯一值打包成一个数组,再提取出来:
from pyspark.sql import functions as F # 聚合得到唯一值数组,提取为Python列表 unique_values = my_spark_df.select(F.collect_set("my_column").alias("unique_vals")).first()["unique_vals"]
注意:如果数据量很大,collect()会把数据拉到Driver节点,可能导致内存问题,要根据数据规模选择合适的方式。
内容的提问来源于stack exchange,提问作者ascripter
相关产品推荐
相关产品推荐

