case class Varnish(ID: String, varnish_latency: Float)
val seq = sc.sequenceFile[LongWritable, BytesWritable](logfile_path)
val usableRDD = seq.map({case (_, v : BytesWritable) => Text.decode(v.getBytes)})
.map(_.split(" "))
.map(p => Varnish(p(11), p(8).toFloat))
.toDF()
usableRDD.registerTempTable("Varnish")
sqlContext.sql("SELECT * from Varnish LIMIT 5").collect().foreach(println) // works fine
val countResult = sqlContext.sql("SELECT COUNT(*) FROM Varnish").collect() // throws Err
val cnt2 = countResult.head.getLong(0)
16/01/23 2点56分18秒sparkDriver-akka.actor.default-dispatcher- 20 INFO RemoteActorRefProvider $ RemotingTerminator:关闭远程守护进程。
16/01/23 02:56:18线程3 INFO ApplicationMaster:取消注册失败的ApplicationMaster(诊断消息:用户类抛出异常:org.apache.spark.SparkException:由于阶段失败导致作业中止:阶段中的任务57 1.0失败4次,最近失败:
在阶段1.0(TID 89,10.1.201.14)中丢失的任务57.3:java.lang.NumberFormatException:对于输入字符串:“nan”
at sun.misc.FloatingDecimal.readJavaFormatString FloatingDecimal.java:1250)java.lang.NumberFormatException:对于输入字符串: “南” 上SELECT COUNT(*)在表上
这就是我一直在寻找解决方案。谢谢。对不起,我是scala的新手,我如何继续进行scala大小写匹配。我想忽略/放置其中p(8)==“nan”的列。 p(8)匹配{case}“nan”=>? case s => s.toFloat } – user1579557
您可以通过不同的方法来处理这个问题,但'flatMap' +空'Seq'将是我个人的选择。 – zero323