前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >scala/java等其他语言从CSV文件中读取数据,使用逗号','分割可能会出现的问题

scala/java等其他语言从CSV文件中读取数据,使用逗号','分割可能会出现的问题

作者头像
孙晨c
发布2021-02-04 10:52:52
6.4K0
发布2021-02-04 10:52:52
举报
文章被收录于专栏:无题~无题~

众所周知,csv文件默认以逗号“,”分割数据,那么在scala命令行里查询的数据:

在这里插入图片描述
在这里插入图片描述

可以看见,字段里就包含了逗号“,”,那接下来切割的时候,这本应该作为一个整体的字段会以逗号“,”为界限进行切割为多个字段。

现在来看看这里的_c0字段一共有多少行记录。

在这里插入图片描述
在这里插入图片描述

记住这个数字:60351行

写scala代码读取csv文件并以逗号为分隔符来分割字段

代码语言:javascript
复制
val lineRDD = sc.textFile("xxxx/xxx.csv").map(_.split(","))

这里只读取了_c0一个字段,否则会报数组下标越界的异常,至于为什么请往下看。 接着还是查询这个字段的有多少行

在这里插入图片描述
在这里插入图片描述

很显然,60364>60351 这就是把一个字段里本来就有的逗号当成了分隔符,导致一个字段切割为两个甚至多个字段,增加了行数。

所以如果csv文件的第一行本来有n个字段,但某个字段里自带有逗号,那就会切割为n+1个字段。自然就会报数组下标越界的异常了

那就把切割规则改一下,只对引号外面的逗号进行分割,对引号内的不分割 就是修改split()方法里的参数为:

代码语言:javascript
复制
split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"))
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档