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

如何处理1GB大CSV文件,合并Text列所有内容?

用PySpark处理1GB大CSV:合并所有Text列内容

没问题,针对你这个1GB超大CSV的合并需求,PySpark绝对是最佳选择——它天生就是为处理无法一次性加载到内存的大文件设计的,完全不用怕内存不够的问题。下面是一步步的具体实现方案:

1. 先准备好PySpark环境

如果还没安装PySpark,先通过pip安装:

pip install pyspark

另外Spark依赖Java,确保你的机器上已经安装了Java 8或以上版本。

2. 初始化SparkSession

这是使用PySpark的第一步,相当于启动Spark的“引擎”:

from pyspark.sql import SparkSession
from pyspark.sql.functions import col, concat_ws, collect_list, instr, substring, trim

# 初始化SparkSession
spark = SparkSession.builder \
    .appName("MergeLargeCSVText") \
    .getOrCreate()

3. 读取大CSV文件

因为你的Text列包含空格,直接用spark.read.csv会把Text里的空格当成列分隔符,导致数据拆分错误。所以我们用spark.read.text读取每一行的原始字符串,再手动拆分:

# 读取整个CSV文件,包括表头
raw_df = spark.read.text("your_large_file.csv")

# 提取表头行,然后过滤掉表头,只保留数据行
header_line = raw_df.first()[0]
data_df = raw_df.filter(col("value") != header_line)

4. 拆分并提取Text列内容

我们需要把每一行拆分成Website和Text两部分,这里取第一个空格之前的内容作为Website,剩下的所有内容作为Text(如果你的分隔符是制表符,把下面的" "换成"\t"即可):

# 截取第一个空格之后的所有内容,作为Text列,并去掉前后多余的空格
data_df = data_df.withColumn(
    "Text",
    trim(substring(col("value"), instr(col("value"), " ") + 1, 1000000))  # 长度设足够大,覆盖所有可能的Text内容
)

5. 合并所有Text内容到一个单元格

用collect_list把所有Text内容收集成一个列表,再用concat_ws用空格连接成一个完整的字符串:

# 合并所有Text内容,用空格分隔
merged_text = data_df.agg(concat_ws(" ", collect_list(col("Text")))).first()[0]

6. 输出结果到新CSV

最后把合并后的内容做成只有一行一列的DataFrame,写入新的CSV文件:

# 创建结果DataFrame,只有一列"Text"
result_df = spark.createDataFrame([(merged_text,)], ["Text"])

# 写入CSV,coalesce(1)确保输出只有一个文件(默认Spark会生成多个分区文件)
result_df.coalesce(1).write.csv("merged_result.csv", header=True, mode="overwrite")

一些注意事项

  • 如果你的CSV里Website列本身包含空格(虽然网站地址一般不会有),那需要调整拆分逻辑,比如用更精准的分隔符(比如制表符)来区分列。
  • coalesce(1)会把所有数据合并到一个分区,虽然会减慢一点速度,但保证输出是单个文件,方便你后续使用。
  • 运行代码时,Spark会自动分布式处理文件,不需要你手动拆分大文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:26:18