У меня есть фрейм данных со столбцом text, в котором много строк, состоящих из английских предложений.
text
It is evening
Good morning
Hello everyone
What is your name
I'll see you tomorrow
У меня есть переменная типа List, в которой есть несколько слов, таких как
val removeList = List("Hello", "evening", "because", "is")
Я хочу удалить все те слова из текста столбца, которые присутствуют в removeList.
Поэтому мой вывод должен быть
It
Good morning
everyone
What your name
I'll see you tomorrow
Как я могу это сделатьиспользуя Spark Scala.
Я написал код наподобие этого:
val stopWordsList = List("Hello", "evening", "because", "is");
val df3 = sqlContext.sql("SELECT text FROM table");
val df4 = df3.map(x => cleanText(x.mkString, stopWordsList));
def cleanText(x:String, stopWordsList:List[String]):Any = {
for(str <- stopWordsList) {
if(x.contains(str)) {
x.replaceAll(str, "")
}
}
}
Но я получаю ошибку
Error:(44, 12) Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases.
val df4 = df3.map(x => cleanText(x.mkString, stopWordsList));
Error:(44, 12) not enough arguments for method map: (implicit evidence$6: org.apache.spark.sql.Encoder[String])org.apache.spark.sql.Dataset[String].
Неуказанное значение параметра-доказательства $ 6.val df4 = df3.map (x => cleanText (x.mkString, stopWordsList));