【问题标题】:Read txt file as PySpark dataframe将 txt 文件读取为 PySpark 数据框
【发布时间】:2026-02-01 06:00:01
【问题描述】:

我想将 txt 读取为 PySpark 数据帧,该数据帧由不均匀的空格分隔。我尝试用一​​个空格分隔分隔符,但它没有正确对齐。

示例 TXT 输入:

id  daily_date  day_of_week fiscal_week fiscal_month    fiscal_year yearweek
1   2010-01-03  0   1   1   2010    201001
2   2010-01-04  1   1   1   2010    201001
3   2010-01-05  2   1   1   2010    201001
4   2010-01-06  3   1   1   2010    201001
5   2010-01-07  4   1   1   2010    201001
6   2010-01-08  5   1   1   2010    201001

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    您可以使用 RDD API 将多个空格替换为单个空格,并将结果转换为数据帧。

    import re
    
    rdd = sc.textFile('file.csv')
    header = rdd.take(1)[0]
    df = rdd.filter(lambda r: r != header) \
            .map(lambda r: re.sub(r'\s+', ' ', r).split(' ')) \
            .toDF(re.sub(r'\s+', ' ', header).split(' '))
    
    df.show()
    +---+----------+-----------+-----------+------------+-----------+--------+
    | id|daily_date|day_of_week|fiscal_week|fiscal_month|fiscal_year|yearweek|
    +---+----------+-----------+-----------+------------+-----------+--------+
    |  1|2010-01-03|          0|          1|           1|       2010|  201001|
    |  2|2010-01-04|          1|          1|           1|       2010|  201001|
    |  3|2010-01-05|          2|          1|           1|       2010|  201001|
    |  4|2010-01-06|          3|          1|           1|       2010|  201001|
    |  5|2010-01-07|          4|          1|           1|       2010|  201001|
    |  6|2010-01-08|          5|          1|           1|       2010|  201001|
    +---+----------+-----------+-----------+------------+-----------+--------+
    

    【讨论】: