Yapamazsınız. Haslanma, non-enjektif olduğundan, ters fonksiyon yoktur. Başka bir deyişle, sonsuz sayıda jeton, tek bir kova ile eşleştirilebilir, böylece hangisinin gerçekte olduğunu söylemek imkansızdır.
Büyük bir karma sayı ve benzersiz sayıda belirteç kullanıyorsanız, göreceli olarak düşük bir sayıysa, veri kümenizden olası bir jetona kadar bir arama tablosu oluşturmayı deneyebilirsiniz. Bire-çok haritalamadır, ancak yukarıdaki şartlar yerine getirildiğinde, çatışma sayısı nispeten düşük olmalıdır.
Geri dönüşümlü bir dönüşüme ihtiyacınız varsa, Tokenizer
ve StringIndexer
birleştirmelerini kullanabilir ve el ile bir seyrek özellik vektörü oluşturabilirsiniz.
Ayrıca bakınız: What hashing function does Spark use for HashingTF and how do I duplicate it?
Düzenleme: Kıvılcım olarak
1.5+ (PySpark 1.6+) Eğer geri dönüşümlü dönüşümü ve depolar kelime geçerlidir CountVectorizer
kullanabilirsiniz.
Python
from pyspark.ml.feature import CountVectorizer
df = sc.parallelize([
(1, ["foo", "bar"]), (2, ["foo", "foobar", "baz"])
]).toDF(["id", "tokens"])
vectorizer = CountVectorizer(inputCol="tokens", outputCol="features").fit(df)
vectorizer.vocabulary
## ('foo', 'baz', 'bar', 'foobar')
Scala:
import org.apache.spark.ml.feature.{CountVectorizer, CountVectorizerModel}
val df = sc.parallelize(Seq(
(1, Seq("foo", "bar")), (2, Seq("foo", "foobar", "baz"))
)).toDF("id", "tokens")
val model: CountVectorizerModel = new CountVectorizer()
.setInputCol("tokens")
.setOutputCol("features")
.fit(df)
model.vocabulary
// Array[String] = Array(foo, baz, bar, foobar)
0. pozisyonda elemanı böylece indeksi 1 ve 1 pozisyonunda indeksi 0, elemana karşılık gelir
.
Bunu 1.2.0'dan beri [docs] (https://spark.apache.org/docs/1.6.0/api/python/pyspark.mllib.html) adresinde görebileceğiniz gibi eklemek isterim , indexOf (term) çağırabilirsiniz – Matt