混合模式 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的主要内容,如果未能解决你的问题,请参考以下文章