scala/java等其他語言從CSV文件中讀取數據,使用逗號','分割可能會出現的問題

衆所周知,csv文件默認以逗號“,”分割數據,那麼在scala命令行裏查詢的數據:
在這裏插入圖片描述
可以看見,字段裏就包含了逗號“,”,那接下來切割的時候,這本應該作爲一個整體的字段會以逗號“,”爲界限進行切割爲多個字段。

現在來看看這裏的_c0字段一共有多少行記錄。
在這裏插入圖片描述
記住這個數字:60351行

寫scala代碼讀取csv文件並以逗號爲分隔符來分割字段

val lineRDD = sc.textFile("xxxx/xxx.csv").map(_.split(","))

這裏只讀取了_c0一個字段,否則會報數組下標越界的異常,至於爲什麼請往下看。
接着還是查詢這個字段的有多少行
在這裏插入圖片描述
很顯然,60364>60351
這就是把一個字段裏本來就有的逗號當成了分隔符,導致一個字段切割爲兩個甚至多個字段,增加了行數。

所以如果csv文件的第一行本來有n個字段,但某個字段裏自帶有逗號,那就會切割爲n+1個字段。自然就會報數組下標越界的異常了

那就把切割規則改一下,只對引號外面的逗號進行分割,對引號內的不分割
就是修改split()方法裏的參數爲:

split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)"))
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章