首页 > 解决方案 > Pyspark / Python:将具有多行行文件的csv文件转换为单行行文件

问题描述

我有一个 csv 文件,它的记录是这样的

id1,id2,id3,id4,id5,id6,id7
1,2,3,4,5,6,7

1,2,3,4

,5,6,

7

1,2

3,4

,5,6,


7

我想更改如下文件 -

id1,id2,id3,id4,id5,id6,id7
1,2,3,4,5,6,7
1,2,3,4,5,6,7
1,2,3,4,5,6,7

我知道 pyspark 可以使用 multiline :True 选项读取此类文件,但我想将此文件转换为单行行,这是业务用例。我该怎么做。要使用的技术是 Pyspark 或 Python (Pandas)。提前致谢

标签: pythonpandaspyspark

解决方案


你有这样的想法吗?

import re

items  = re.findall("[^ ,\n]+", """id1,id2,id3,id4,id5,id6,id7
1,2,3,4,5,6,7

1,2,3,4

,5,6,

7

1,2

3,4

,5,6,


7""")

rows = [items[i:i+7] for i in range(0,len(items),7)]
pd.DataFrame(rows[1:], columns=rows[0])

输出:

  id1 id2 id3 id4 id5 id6 id7
0   1   2   3   4   5   6   7
1   1   2   3   4   5   6   7
2   1   2   3   4   5   6   7

由于这里已要求它是第二部分的无循环版本:

rows = np.array(items).reshape(len(items)//7,7)
pd.DataFrame(rows[1:], columns=rows[0])

我已经通过使用 jupter 测试了它是否真的可以节省时间%%timeit:结果是:

  • 正则表达式部分耗时 6.66 µs ± 43.8 ns,
  • 然后将其转换为数据帧的旧循环部分需要 759 µs ± 2.81 µs
  • 新的 numpy 版本需要 149 µs ± 4.82 µs

推荐阅读