【问题标题】:Mixed Schema CSV Import Pyspark混合模式 CSV 导入 Pyspark
【发布时间】:2020-06-08 17:41:31
【问题描述】:

我有一个要读入数据框的 CSV 文件文件夹。问题是,虽然它们都包含我需要的列集,但其中一些还包含其他列。因此,对于文件夹中的每个 CSV,我只想读取我需要的常用列集。

例如:

工作表 1 包含以下列:

第 1 列,第 2 列,第 3 列,X

工作表 2 包含以下列:

第 1 列、第 2 列、第 3 列

我只需要第 1 列、第 2 列和第 3 列。是否可以在读取时处理这些问题,或者我需要单独读取它们,然后选择适当的列并将它们附加在一起。

【问题讨论】:

    标签: python python-3.x pyspark apache-spark-sql


    【解决方案1】:

    尝试在目录中使用 for loop over all files 并仅从文件中读取所需的列。

    Example:

    #files path list
    file_lst=['<path1>','<path2>']
    
    from pyspark.sql.functions import *
    from pyspark.sql.types import *
    
    #define schema for the required columns
    schema = StructType([StructField("column1",StringType(),True),StructField("column2",StringType(),True)])
    
    #create an empty dataframe
    df=spark.createDataFrame([],schema)
    
    #loop through files with reading header from the file then select only req cols
    #union all dataframes
    
    for i in file_lst:
        tmp_df=spark.read.option("header","true").csv(i).select("column1","column2")
        df=df.unionAll(tmp_df)
    
    #display results
    df.show()
    

    如果您的目录中的文件在所有文件中以特定顺序的column1,column2,column3..etc(required columns),那么您可以尝试如下:

    spark.read.option("header","true").csv("<directory>").select("column1","column2","column3").show()
    

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 2012-09-09
      • 2017-05-30
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 2015-11-08
      相关资源
      最近更新 更多