.dat
文件的每一行末尾都有||||
。在拆分时,不考虑这四个末端管道。
val splitLine = record.split("\\|").to[ListBuffer]
// I/p: A|B||||||||||C|D||||
// O/p: A,B,,,,,,,,,,C,D
有没有办法在Spark中读取dat文件?
dat文件中每行末尾的四个管道是什么意思?
答案 0 :(得分:0)
您需要将split
函数与-1
一起使用。不论有无场景,请观察以下内容。
import ss.implicits._
val rd = sc.textFile("path to your file")
.map(x => x.split("[|]",-1)).map(x => (x(0), x(1), x(2), x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10), x(11), x(12), x(13), x(14), x(15), x(16))) // `split` function with `-1`
rd.foreach(println)
输出:
(A,B,,,,,,,,,,C,D,,,,)
没有拆分功能,它将引发错误。因为它无法读取最后4个空列。
import ss.implicits._
val rd = sc.textFile("path to your file")
.map(x => x.split("[|]")).map(x => (x(0), x(1), x(2), x(3), x(4), x(5), x(6), x(7), x(8), x(9), x(10), x(11), x(12), x(13), x(14), x(15), x(16))) // `split` function without `-1`
rd.foreach(println)
java.lang.ArrayIndexOutOfBoundsException: 13