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

Jupyter Notebook从PostgreSQL取数失败,是否建议用PySpark?

问题分析与解决方案

为什么pandas读取全量数据会失败

当你用pd.read_sql_query读取6623万行数据时,pandas会尝试把所有数据一次性加载到Jupyter所在节点的内存中。这种规模的数据量远超普通机器的内存容量,会直接导致内存耗尽,进而引发Jupyter Notebook进程崩溃,出现连接中断的错误。而添加LIMIT 1000时数据量极小,内存可以轻松容纳,所以能正常执行。

是否建议用PySpark处理这类大数据?

非常建议,核心原因如下:

  • PySpark基于分布式计算框架,不会将全量数据加载到单节点内存,而是把数据分割成多个分区,分散到集群的多个节点上并行处理,能轻松应对千万级甚至更大规模的数据。
  • PySpark支持通过JDBC直接连接PostgreSQL,还可以指定分区列实现并行读取,大幅提升数据加载效率,从根源上避免单节点内存瓶颈。

简单的PySpark读取PostgreSQL示例

from pyspark.sql import SparkSession

# 初始化Spark会话
spark = SparkSession.builder.appName("PostgreSQL_Full_Read").getOrCreate()

# 配置JDBC连接参数
jdbc_url = "jdbc:postgresql://<POSTGRES_ADDRESS>:<POSTGRES_PORT>/<POSTGRES_DBNAME>"
conn_properties = {
    "user": "<POSTGRES_USERNAME>",
    "password": "<POSTGRES_PASSWORD>",
    "driver": "org.postgresql.Driver"
}

# 读取全量数据,可指定分区列实现并行读取(可选)
spark_df = spark.read.jdbc(
    url=jdbc_url,
    table="public.timeline",
    properties=conn_properties,
    # 可选配置:按id字段分区,10个并行任务读取
    # partitionColumn="id",
    # lowerBound=1,
    # upperBound=66231781,
    # numPartitions=10
)

# 查看数据前几行
spark_df.show()

额外建议

如果暂时没有Spark集群,也可以先在PostgreSQL中做数据预处理:比如只查询需要的字段、过滤不必要的行,缩减数据量后再用pandas读取。但如果必须处理全量数据,PySpark是更稳定、高效的选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:36:20