混合模式 CSV 导入 Pyspark

Posted

技术标签:

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

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

例如:

工作表 1 包含以下列:

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

工作表 2 包含以下列:

第 1 列、第 2 列、第 3 列

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

【问题讨论】:

【参考方案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()

【讨论】:

以上是关于混合模式 CSV 导入 Pyspark的主要内容,如果未能解决你的问题,请参考以下文章

Spring-导入和混合配置

Blend混合模式 与 20余种颜色混合模式代码实现

使用Dask加载多个CSV文件时混合列

CSS3混合模式

Photoshop的混合模式

Pandas - 使用 read_csv 指定具有混合列数据的 dtype