Вы не можете просто назначить значение символу в строке. Используйте этот метод для замены значения определенного символа:
name = "India"
result=name .replace("d",'*')
Вывод: In * ia
Кроме того, если вы хотите заменить say * для всех вхождений первого символа кроме первого символа, например. строка = лепетный вывод = ba ** le
Код:
name = "babble"
front= name [0:1]
fromSecondCharacter = name [1:]
back=fromSecondCharacter.replace(front,'*')
return front+back
Я бы не использовал Spark в первую очередь, но если вы действительно привержены конкретному стеку, вы можете комбинировать кучу трансформаторов мл, чтобы получить наилучшие совпадения. Вам понадобятся Tokenizer
(или split
):
import org.apache.spark.ml.feature.RegexTokenizer
val tokenizer = new RegexTokenizer().setPattern("").setInputCol("text").setMinTokenLength(1).setOutputCol("tokens")
NGram
(например, 3 грамма)
import org.apache.spark.ml.feature.NGram
val ngram = new NGram().setN(3).setInputCol("tokens").setOutputCol("ngrams")
Vectorizer
(например CountVectorizer
или HashingTF
):
import org.apache.spark.ml.feature.HashingTF
val vectorizer = new HashingTF().setInputCol("ngrams").setOutputCol("vectors")
и LSH
:
import org.apache.spark.ml.feature.{MinHashLSH, MinHashLSHModel}
// Increase numHashTables in practice.
val lsh = new MinHashLSH().setInputCol("vectors").setOutputCol("lsh")
Объединить с Pipeline
import org.apache.spark.ml.Pipeline
val pipeline = new Pipeline().setStages(Array(tokenizer, ngram, vectorizer, lsh))
Fit на примерах:
val query = Seq("Hello there 7l | real|y like Spark!").toDF("text")
val db = Seq(
"Hello there