我有一个包含不同数量列的竖线分隔文件,如下所示:
[root@RHEL7lab /]# grep "^[A-Za-z|*]*\.[A-Za-z|*]" /etc/rsyslog.conf | grep "\s@"
auth.*,authpriv.* @loghost.example.com:10514 # One "@" means UDP
*.* @@loghost.example.com # Two "@" means TCP
[root@RHEL7lab /]#
我试图找到一种优雅的方法,使用pyspark将其导入数据框。我可以尝试修复文件以添加尾随|当最后一列丢失时(只有最后一列可能丢失),但很想找到一个不涉及更改输入文件的解决方案。
答案 0 :(得分:3)
您可以使用模块pyspark.sql.readwriter
中的方法csv
并设置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。