首页 > 解决方案 > 在 Spark 中导入具有不同列数的文本文件

问题描述

我有一个带有不同列数的管道分隔文件,如下所示:

id|name|attribute|extraattribute
1|alvin|cool|funny
2|bob|tall
3|cindy|smart|funny

我正在尝试找到一种优雅的方法来使用 pyspark 将其导入数据框。我可以尝试修复文件以添加尾随 | 当最后一列丢失时(只能丢失最后一列),但希望找到不涉及更改输入文件的解决方案。

标签: apache-sparkpyspark

解决方案


您可以使用csv模块中的方法pyspark.sql.readwriter并设置mode="PERMISSIVE"

df = sqlCtx.read.csv("/path/to/file.txt", sep="|", mode="PERMISSIVE", header=True)
df.show(truncate=False)
#+---+-----+---------+--------------+
#|id |name |attribute|extraattribute|
#+---+-----+---------+--------------+
#|1  |alvin|cool     |funny         |
#|2  |bob  |tall     |null          |
#|3  |cindy|smart    |funny         |
#+---+-----+---------+--------------+

从文档:

PERMISSIVE :当遇到损坏的记录时,将其他字段设置为 null。

当用户设置模式时,它会为额外的字段设置 null。

这比我最初在评论中建议的要容易得多。


推荐阅读