私はファイルを読みたい場合は、マイファイル形式は次のとおりです。 12334本:23、単語:21、教師:23scala.MatchError:[Ljava.lang.String; (Ljava.lang.String [クラスの;)
val fp = "/user/user_id.txt"
sc.textFile(fp).map { s =>
val Array(did, info_s) = s.split("\t")
val info = info_s.split(",").map { kv =>
val Array(k, v) = kv.split(":")
(k, v.toDouble)
}.toSeq
(did, info)
}
このスカラエラーが発生しました。
scala.MatchError: [Ljava.lang.String;@51443799 (of class [Ljava.lang.String;)
at com.test.news.IO$$anonfun$1.apply(App.scala:58)
at com.test.news.IO$$anonfun$1.apply(App.scala:57)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:409)
at scala.collection.Iterator$class.foreach(Iterator.scala:893)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1336)
at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:59)
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:104)
at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:48)
at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:310)
at scala.collection.AbstractIterator.to(Iterator.scala:1336)
at scala.collection.TraversableOnce$class.toBuffer(TraversableOnce.scala:302)
at scala.collection.AbstractIterator.toBuffer(Iterator.scala:1336)
at scala.collection.TraversableOnce$class.toArray(TraversableOnce.scala:289)
at scala.collection.AbstractIterator.toArray(Iterator.scala:1336)
at org.apache.spark.rdd.RDD$$anonfun$collect$1$$anonfun$13.apply(RDD.scala:912)
at org.apache.spark.rdd.RDD$$anonfun$collect$1$$anonfun$13.apply(RDD.scala:912)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1916)
at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1916)
at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:70)
at org.apache.spark.scheduler.Task.run(Task.scala:86)
at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:274)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
ライン58は、ヴァル・アレイ(、info_sをしました)= s.split( "\ tの")で、私はこの方法を使用することはできませんか?私は混乱して〜助けている!
ことつまり、入力行に、そのコード行で期待している2つの列の数よりも少ないか多い列があることを意味します。文字列 '" abcde "'と '" \ tb \ tc "'を入力としてスカラーシェルでその行を試してください。 – vanza
@vanzaこれは答えであり、コメントではありません(特に現在の答えが与えられています)。 –