You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Databricks中不使用RDD将PySpark DataFrame列转为列表的方法

解决PySpark DataFrame列转无冗余列表的方法

当你用df.select('col_name').collect()得到的是包含Row对象的列表(比如[Row(col_name=1), Row(col_name=2)]),这些Row就是你感知到的“冗余值”。不用RDD的话,有两种简单方法可以提取纯值列表:

方法一:列表推导式直接提取Row字段

这是最直观的方式,遍历collect()返回的Row列表,逐个提取对应列的值:

# 提取列名为col_name的纯值列表
col_values = [row.col_name for row in df.select('col_name').collect()]

# 如果列名是动态生成的,也可以用键值访问
# col_values = [row['col_name'] for row in df.select('col_name').collect()]

方法二:用Spark内置函数collect_list在集群端聚合

如果数据量不算特别大,可以先用collect_list函数在Spark侧把列值聚合为一个列表,再拉取到Driver端:

from pyspark.sql import functions as F

# 聚合得到包含单列列表的DataFrame
agg_df = df.agg(F.collect_list('col_name').alias('col_values_list'))
# 提取列表
col_values = agg_df.first()['col_values_list']

两种方法的注意事项

  • 方法一适合小数据量场景:collect()会把所有Row数据拉到Driver端,数据量过大可能导致Driver内存不足。
  • 方法二要注意数据规模:collect_list会把所有列值聚合到一个分区,数据量极大时可能触发OOM,此时建议先过滤或采样数据。

内容的提问来源于stack exchange,提问作者doubleD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:25:32