【发布时间】:2017-11-30 03:09:24
【问题描述】:
我在 spark-shell 中使用 Spark 2.1.1 和 Scala 2.11.8。
我的输入数据集类似于:
2017-06-18 00:00:00 , 1497769200 , z287570731_serv80i:7:175 , 5:Re
2017-06-18 00:00:00 , 1497769200 , p286274731_serv80i:6:100 , 138
2017-06-18 00:00:00 , 1497769200 , t219420679_serv37i:2:50 , 5
2017-06-18 00:00:00 , 1497769200 , v290380588_serv81i:12:800 , 144:Jo
2017-06-18 00:00:00 , 1497769200 , z292902510_serv83i:4:45 , 5:Re
2017-06-18 00:00:00 , 1497769200 , v205454093_serv75i:5:70 , 50:AK
它保存为 CSV 文件,使用 sc.textFile("input path") 读取
经过几次转换,这是我拥有的 RDD 的输出:
(String, String) = ("Re ",7)
我通过执行得到这个
val tid = read_file.map { line =>
val arr = line.split(",")
(arr(3).split(":")(1), arr(2).split(":")(1))
}
我的输入 RDD 是:
( z287570731_serv80i:7:175 , 5:Re )
( p286274731_serv80i:6:100 , 138 )
( t219420679_serv37i:2:50 , 5 )
( v290380588_serv81i:12:800 , 144:Jo )
( z292902510_serv83i:4:45 , 5:Re )
可以观察到,在第一个条目第 2 列中,我有
5:Re
我得到了输出
("Re ",7)
但是当我到达第二行时,根据格式,第 2 列是 138,应该是
138:null
但在执行时给出 ArrayIndexOutOfBoundsException
tid.collect()
如何更正此问题,以便在第二行和第三行分别以 138 和 5 显示 null?我试着这样做:
tid.filter(x => x._1 != null )
【问题讨论】:
标签: scala apache-spark rdd