Spark Scala - java.util.NoSuchElementException и очистка данных

У меня быланалогичная проблема раньше, но я ищу обобщающий ответ. я используюискровым corenlp чтобы получить оценки настроений по электронной почте. Иногда sentiment () дает сбой при вводе (возможно, он слишком длинный, возможно, он имел неожиданный характер). Он не говорит мне, что в некоторых случаях происходит сбой, а просто возвращаетColumn sentiment('email), Таким образом, когда я пытаюсьshow() за определенную точку илиsave() мой фрейм данных, я получаюjava.util.NoSuchElementException так какsentiment() должно быть, ничего не вернул в этом ряду.

Мой исходный код загружает данные и применяетsentiment() как показано вspark-corenlp API.

       val customSchema = StructType(Array(
                        StructField("contactId", StringType, true),
                        StructField("email", StringType, true))
                        )

// Load dataframe   
val df = sqlContext.read
                        .format("com.databricks.spark.csv")
                        .option("delimiter","\t")          // Delimiter is tab
                        .option("parserLib", "UNIVOCITY")  // Parser, which deals better with the email formatting
                        .schema(customSchema)              // Schema of the table
                        .load("emails")                        // Input file


    val sent = df.select('contactId, sentiment('email).as('sentiment)) // Add sentiment analysis output to dataframe

Я попытался отфильтровать значения NULL и NaN:

val sentFiltered = sent.filter('sentiment.isNotNull)
                .filter(!'sentiment.isNaN)
                .filter(col("sentiment").between(0,4))

Я даже пытался сделать это с помощью SQL-запроса:

sent.registerTempTable("sent")
val test = sqlContext.sql("SELECT * FROM sent WHERE sentiment IS NOT NULL")

Я не знаю, что приводит к краху spark-corenlp. Как я могу узнать? Иначе, как я могу отфильтровать эти несуществующие значения из col («настроение»)? Или я должен попытаться поймать исключение и проигнорировать строку? Это вообще возможно?

Ответы на вопрос(0)

Ваш ответ на вопрос