我的文件包含以下记录:
11001^1^100^2015-06-05 22:35:21.543^<d><nv n="ExtStationID" v="Station/FYI Television, Inc./25102" /><nv n="MediaDesc" v="19b8f4c0-92ce-44a7-a403-df4ee413aca9" /><nv n="ChannelNumber" v="1366" /><nv n="Duration" v="24375" /><nv n="IsTunedToService" v="True" /><nv n="StreamSelection" v="FULLSCREEN_PRIMARY" /><nv n="ChannelType" v="LiveTVMediaChannel" /><nv n="TuneID" v="636007629215440000" /></d>^0122648d-4352-4eec-9327-effae0c34ef2^2016060601
我应该用文件^
拆分文件。但我收到ArrayIndexOutOfBoundsException
错误:
这是我的计划:
val spark = SparkSession.builder().appName("KPI 1").master("local").getOrCreate()
val data = spark.read.textFile("/some/path/to/Set_Top_Box_Data.txt").rdd
val raw = data.map{ record =>
val rec = record.trim().toString.split("^")
(rec(0),rec(2))
}
raw.collect().foreach(println)
spark.stop
这是相关的错误跟踪:
18/03/15 13:38:33 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
java.lang.ArrayIndexOutOfBoundsException: 2
at KPI1.FilterForId1001$$anonfun$1.apply(FilterForId1001.scala:12)
at KPI1.FilterForId1001$$anonfun$1.apply(FilterForId1001.scala:11)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:410)
at scala.collection.Iterator$class.foreach(Iterator.scala:891)
...
答案 0 :(得分:3)
你应该这样分开:
.split("\\^")
而不是
split("^")
答案 1 :(得分:2)
^
是一个表示该行开头的正则表达式。
你需要逃避它,你应该好。
val raw = data.map{record=>{ val rec = record.trim().toString.split("\\^")
(rec(0),rec(2))
}}