【问题标题】:How to drop a column from a csv file when reading into a spark dataframe读入火花数据框时如何从csv文件中删除列
【发布时间】:2026-01-08 11:45:01
【问题描述】:

我正在尝试从 csv 文件创建 spark 数据框,但是我不想在数据框中包含来自原始数据的特定列。这在设置架构或读取 csv 文件时是否可行?

【问题讨论】:

    标签: csv pyspark apache-spark-sql hdfs


    【解决方案1】:

    @Manu Valdés 的drop 答案是最好的方法,这里是pyspark 的代码

    假设我们有一个包含 3 列的 file.csv

    col1;col2;col3
    val1;val2;val3
    val4;val5;val6
    

    现在使用 sqlContext 读取 csv 文件:

    df = sqlContext.read.format('csv').options(header='true', delimiter=';').load('/FileStore/file.csv')
    
    df.printSchema()
    
    root 
     |-- col1: string (nullable = true)
     |-- col2: string (nullable = true)
     |-- col3: string (nullable = true)
    

    删除col2

    df2 = df.drop('col2')
    df2.printSchema()
    
    root 
     |-- col1: string (nullable = true)
     |-- col3: string (nullable = true)
    

    【讨论】:

    • 是否可以在读取 csv 时删除该列,而不是在创建数据框后删除该列?
    • 数据架构定义可以,但要删除的列必须在csv文件的末尾
    • 最好的方法是使用drop('col2')select('col1', 'col3')
    • 如果您更喜欢 RDD,那么您可以在创建数据框之前删除列
    【解决方案2】:

    DataFrame 方法drop 返回一个没有指定列的DataFrame。

    【讨论】: