apache-spark - 在 Spark 中导入具有不同列数的文本文件
问题描述
我有一个带有不同列数的管道分隔文件,如下所示:
id|name|attribute|extraattribute
1|alvin|cool|funny
2|bob|tall
3|cindy|smart|funny
我正在尝试找到一种优雅的方法来使用 pyspark 将其导入数据框。我可以尝试修复文件以添加尾随 | 当最后一列丢失时(只能丢失最后一列),但希望找到不涉及更改输入文件的解决方案。
解决方案
您可以使用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。
这比我最初在评论中建议的要容易得多。
推荐阅读
- jenkins - 如何知道一个工件是否已经存在于 Jfrog Artifactory by Jenkins
- office365 - 以编程方式从外部组织的 Office365 Excel 文件中读取
- javascript - Javascript - 禁用更改选项以防止选择下拉列表中的重复选择导致 .val() 出现问题
- c# - 在 Selenium C# 中的 Shadow Root 下提取值
- mysql - 如何使用 Python 3.6 在 mysql 查询中返回键值对数组
- python-3.x - 由于 nbclient,Testbook 给出超时错误
- linux - 具有多个传出 IP 的 Docker 容器
- windows - 批处理文件 - 当前工作目录干扰环境变量 CD
- reactjs - React Stripe 结帐多个行项目
- google-apps-script - 如何通过谷歌应用脚本在一个单元格中应用多个数据验证规则?