python - 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)。提前致谢
解决方案
你有这样的想法吗?
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
推荐阅读
- gradle - gradle:如何从另一个项目访问 gradle.properties
- css - 单击同一页面上的锚链接时关闭汉堡菜单
- python - Pandas 按时间绘制分组条形图
- python-3.x - 从数据类型为 tf.string 的张量中提取字符串值时遇到问题
- c++ - std::array 的初始化
当 T 不可默认构造时,在构造函数初始值设定项列表中 - c# - MVC 中的自定义验证属性
- html - 谁能告诉我如何用 HTML/CSS 插入它
- linux - 如何编写“bash script.sh 参数”
- java - Xamarin Android - 启动画面在恢复时不起作用
- angular - 在 ngIf 中动态创建组件