【问题标题】:Importing text file with varying number of columns in Spark在 Spark 中导入具有不同列数的文本文件
【发布时间】:2018-05-03 23:53:51
【问题描述】:

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

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

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

【问题讨论】:

  • 一种选择可能是将其作为一个大列读入,在适当的时候在末尾添加一个|,然后拆分成列,如this post所示。

标签: apache-spark pyspark


【解决方案1】:

可以使用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。

这比what I originally suggested in the comments简单多了。

【讨论】:

  • 如果第一行包含 null,则忽略最后一列。
猜你喜欢
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2014-11-15
  • 1970-01-01
相关资源
最近更新 更多