【发布时间】:2018-07-29 09:39:56
【问题描述】:
我有一个包含多个字段的 CSV 文件。数据跨越多行的字段(字符串)很少。我想将这些多行聚合为一行。
输入数据:
1, "asdsdsdsds", "John"
2, "dfdhifdkinf
dfjdfgkdnjgknkdjgndkng
dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
预期输出:
1, "asdsdsdsds", "John"
2, "dfdhifdkinf dfjdfgkdnjgknkdjgndkng dkfdkjfnjdnf", "Roy"
3, "dfjfdkgjfgn", "Rahul"
之前在SO 中提出了同样的问题。然而,该解决方案是使用电源外壳实现的。是否可以使用 python 或 pandas 或 pyspark 来实现相同的目标。
当数据跨越多行时,它肯定会用双引号引起来。
我尝试了什么
即使有些字段跨越多行,我也可以使用 pandas 和 pyspark 毫无问题地读取数据。
熊猫:
pandas_df = pd.read_csv("file.csv")
PySpark
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true', inferschema='true') \
.option("delimiter", ",").option("escape", '\\').option("escape", ':').\
option("parserLib", "univocity").option("multiLine", "true").load("file.csv")
编辑:
csv 文件中可以有 n 个字段,并且这个数据范围可以在任何字段中。
【问题讨论】:
-
“即使有些字段跨越多行,我也可以使用 pandas 和 pyspark 毫无问题地读取数据。”那么究竟是什么问题呢?
-
我想要新的 csv 文件中的数据(已清理),其中多行合并为一行。
标签: python pandas csv pyspark newline