0

ich meine Reise fange mit PySpark und ich habe in einem Punkt für ex .: Ich habe Code wie folgt fest: (Ich nahm es von https://spark.apache.org/docs/2.1.0/ml-features.html)PySpark: Wörter Mapping von Tokenizer mit

from pyspark.ml.feature import Tokenizer, RegexTokenizer 
from pyspark.sql.functions import col, udf 
from pyspark.sql.types import IntegerType 

sentenceDataFrame = spark.createDataFrame([ 
    (0, "Hi I heard about Spark"), 
    (1, "I wish Java could use case classes"), 
    (2, "Logistic,regression,models,are,neat") 
], ["id", "sentence"]) 

tokenizer = Tokenizer(inputCol="sentence", outputCol="words") 

regexTokenizer = RegexTokenizer(inputCol="sentence", outputCol="words", pattern="\\W") 
# alternatively, pattern="\\w+", gaps(False) 

countTokens = udf(lambda words: len(words), IntegerType()) 

tokenized = tokenizer.transform(sentenceDataFrame) 
tokenized.select("sentence", "words")\ 
    .withColumn("tokens", countTokens(col("words"))).show(truncate=False) 

regexTokenized = regexTokenizer.transform(sentenceDataFrame) 
regexTokenized.select("sentence", "words") \ 
    .withColumn("tokens", countTokens(col("words"))).show(truncate=False) 

Und ich füge etwas wie folgt aus:

test = sqlContext.createDataFrame([ 
    (0, "spark"), 
    (1, "java"), 
    (2, "i") 
], ["id", "word"]) 

Ausgang ist:

id |sentence       |words          |tokens| 
+---+-----------------------------------+------------------------------------------+------+ 
|0 |Hi I heard about Spark    |[hi, i, heard, about, spark]    |5  | 
|1 |I wish Java could use case classes |[i, wish, java, could, use, case, classes]|7  | 
|2 |Logistic,regression,models,are,neat|[logistic, regression, models, are, neat] |5  | 

Am I p MÖGLICHE um so etwas wie dies zu erreichen: [Id von ‚test‘, Id von ‚regexTokenized‘]

2, 0 
2, 1 
1, 1 
0, 1 

Aus Liste von ‚Test‘ kann ich IDs grap von ‚regexTokenized‘, wo Token versehen ‚Worte‘ abgebildet werden können zwischen beiden Datensätzen? Oder vielleicht eine andere Lösung sollte genommen werden?

Im Voraus vielen Dank in jede Hilfe :)

Antwort

0

explode und join:

from pyspark.sql.functions import explode 

(testTokenized.alias("train") 
    .select("id", explode("words").alias("word")) 
    .join(
     trainTokenized.select("id", explde("words").alias("word")).alias("test"), 
     "word")) 
Verwandte Themen