Я использую Spark 1.2 для обработки некоторых данных. Я создал схему, используя StructField.Apache Spark SQL NumberFormatException
val exampleSchema = StructType(Array(StructField("SerialNo",StringType,true),StructField("Date",DateType,true),StructField("Value",IntegerType,true)))
val exampleRowRDD = rawData.map(_.split(",")).map(p => Row(p(0),repairDate(p(1)), p(2).toInt))
val schemaRDD = sqlContext.applySchema(exampleRowRDD, exampleSchema)
schemaRDD.registerTempTable("ExampleTable")
Теперь, когда я бегу запрос к таблице, я получаю эту ошибку:
java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:504)
at java.lang.Integer.parseInt(Integer.java:527)
at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:229)
at scala.collection.immutable.StringOps.toInt(StringOps.scala:31)
at $line16.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$2.apply(<console>:49)
at $line16.$read$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$iwC$$anonfun$2.apply(<console>:49)
at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)
at org.apache.spark.sql.columnar.InMemoryRelation$$anonfun$3$$anon$1.next(InMemoryColumnarTableScan.scala:122)
at org.apache.spark.sql.columnar.InMemoryRelation$$anonfun$3$$anon$1.next(InMemoryColumnarTableScan.scala:112)
at org.apache.spark.storage.MemoryStore.unrollSafely(MemoryStore.scala:249)
at org.apache.spark.CacheManager.putInBlockManager(CacheManager.scala:163)
at org.apache.spark.CacheManager.getOrCompute(CacheManager.scala:70)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:228)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
at org.apache.spark.rdd.MapPartitionsRDD.compute(MapPartitionsRDD.scala:35)
at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:263)
at org.apache.spark.rdd.RDD.iterator(RDD.scala:230)
Я знаю, что мои данные имеет нулевые значения, и я попытался обработать нулевые значения с опцией, некоторые , None, но затем Spark SQL не распознает тип данных. Итак, нижняя строка для моего столбца «Значение» все значения должны быть целыми, но null не может быть преобразован в целое число. Что мне делать? Пример примера примерного примера будет оценен.
Спасибо, что ответили Петром. Однако я пробовал это, но при запуске запросов к искровой таблице он вызывает ошибки. 'Исключение в потоке "main" scala.MatchError: None (из класса scala.None $) \t at scala.tools.nsc.typechecker.Implicits $ ImplicitSearch.scala $ tools $ nsc $ typechecker $ Implicits $ ImplicitSearch $$ typedImplicit (Implicits.scala: 458) ' – suri
Какие ошибки вы получаете? –
У меня есть два файла. Файл 1 имеет нулевые значения. Я применил ваш метод для создания таблицы из файла. Затем я присоединился к двум столам. Пока что хорошо. Затем я попытался зарегистрировать выход RDD как новая таблица, и это, когда я получаю эту ошибку: - 'machineJoinedEvents.registerTempTable («machineJoinedEventsTable») ошибка: неперехваченного исключения во время компиляции: scala.MatchError scala.MatchError: Нет (из class scala.None $) Эта запись, похоже, убила компилятор. Должен ли я воспроизводить вашей сессии? Я могу перезапустить каждую строку, кроме последней. [y/n] ' – suri