1

Akışta bir SQL sorgusu başlatmak için aşağıdaki koda sahibim. Sorunum, sonuçlardan birinin ArrayIndexOutOfBoundsException olduğunu gösteriyor. Bu neden oluyor?Spark üzerinden Aktarım SQL - ArrayIndexOutOfBoundsException

import org.apache.spark._ 
import org.apache.spark.streaming.{Seconds, StreamingContext} 
import org.apache.spark.streaming.StreamingContext._ 
import org.apache.spark.sql.SQLContext 
import org.apache.spark.streaming.Duration 

import org.apache.spark.sql.functions.udf 

object StreamingSQL { 

    case class Persons(name: String, age: Int) 

    def main(args: Array[String]) { 

     val sparkConf = new SparkConf().setMaster("local").setAppName("HdfsWordCount") 
     val sc = new SparkContext(sparkConf) 
     // Create the context 
     val ssc = new StreamingContext(sc, Seconds(2)) 

     val lines = ssc.textFileStream("/home/cloudera/Smartcare/stream/") 
     lines.foreachRDD(rdd=>rdd.foreach(println)) 

     val sqc = new SQLContext(sc); 
     //import sqc.createSchemaRDD 
     import sqc.implicits._ 

    // Create the FileInputDStream on the directory and use the 
    // stream to count words in new files created 

     lines.foreachRDD{rdd=> 
      val persons = rdd.map(_.split(",")).map(p => Persons(p(0), p(1).trim.toInt)).toDF() 
      persons.registerTempTable("data") 
      val teenagers = sqc.sql("SELECT name FROM data WHERE age >= 13 AND age <= 19") 
      teenagers.foreach(println) 
    } 

    ssc.start() 
    ssc.awaitTermination() 
    } 
} 

Bu aldığım çıktı. Doğru tahmin sonra hatayı atlamak:

16/03/23 16:58:56 INFO GenerateUnsafeProjection: Code generated in 131.828141 ms 
[Edgar] 
16/03/23 16:58:56 ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1) 
java.lang.ArrayIndexOutOfBoundsException: 1 

Benim txt geçerli: Isabel50 hiçbir virgül çünkü

Ana,31 
Edgar,16 
Luis,22 
Noelia,26 
Isabel50 
Pablo,34 
Laura,18 
Paco,17 
+0

Aslında, RDD'deki verilerin iki alanı olup olmadığını kontrol ederek başlayacağım. – eliasah

+0

RDD'nin iki alana sahip olduğunu kontrol ettim. – nest

+0

Şimdi test edemiyorum ama en azından bir giriş veri örneği sağlamanız iyi bir şey. Bütün bir RDD olarak okuyup dönüşümü gerçekleştirirseniz aynı hatayı verip getirmediğini kontrol etmeye çalışabilir misiniz? – eliasah

cevap

3

öyle. Bu satır için split(",") yalnızca bir değer döndürüyor, bu nedenle p(1) bu satır için başarısız oluyor.

İlgili konular