【问题标题】:reading multiple csv files using pyspark使用 pyspark 读取多个 csv 文件
【发布时间】:2020-05-08 21:37:16
【问题描述】:

我需要一次读取多个 csv 文件。现在,这些 csv 文件可能具有可变数量的列并且以任何顺序排列。我们要求只读取 csv 文件中的特定列。我们如何做到这一点?我曾尝试定义自定义架构,但随后我在列中得到了不同的数据。

例如:

CSV 文件

ID、姓名、地址 如何仅选择 Id 和地址列。因为如果我说 select (Id, Address) 那么它会在 Address 列中给我 ID 和 Name 数据。我想在阅读时根据标题名称只选择 ID 和地址列。

谢谢, 导航

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    您可以遍历文件并创建最终数据框,例如:

    files = ['path/to/file1.csv', 'path/to/file2.csv', 'path/to/file3.csv', 'path/to/file4.csv']
    
    #define the output dataframe's schema column name and type should be correct
    schema = t.StructType([
        t.StructField("a", t.StringType(), True), StructField("c", t.StringType(), True)
    ])
    
    output_df = spark.createDataFrame([],schema)
    
    
    
    for i,file in enumerate(data):
        df = spark.read.csv(file, header=True)
        output_df = output_df.union(df.select('a','c'))
    
    output_df.show()
    

    output_df 将包含您想要的输出。

    【讨论】:

    • 在读取 CSV 文件时,我们正在使用 header=True 解析文件...尝试然后分享结果
    • 不错的解决方案..!
    • 有什么方法可以从 csv 本身读取所需的列数,而不是遍历文件。由于我们有大约 10000 个文件,对它们进行迭代会导致非常糟糕的性能
    • @ShubhamJain,如您所述,如何以列表格式获取 datalake 目录中所有文件的列表。
    • 迭代读取10000个文件的数据时性能很差。我们需要想办法只从 csv 中读取选定的列
    猜你喜欢
    • 2021-11-19
    • 2022-01-19
    • 2022-01-03
    • 1970-01-01
    • 2017-07-25
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多