簡體   English   中英

Pyspark/Python:將具有多行行文件的 csv 文件轉換為單行行文件

[英]Pyspark/Python : Converting csv file which has Multiline rows file to single line row file

我有一個 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)。 提前致謝

你有沒有想過這樣的事情?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM