NGram
class pyspark.ml.feature.NGram(n=2, inputCol=None, outputCol=None)
将输入的字符串数组转换为 n-gram 数组的特征转换器。 输入数组中的空值将被忽略。 它返回一个 n-gram 数组,其中每个 n-gram 由空格分隔的单词字符串表示。 当输入为空时,返回一个空数组。 当输入数组长度小于 n(每 n-gram 的元素数)时,不返回 n-gram
默认n=2
01.初始化:
from pyspark.sql import SparkSession
spark = SparkSession.builder.config("spark.Driver.host","192.168.1.4")\
.config("spark.ui.showConsoleProgress","false")\
.appName("NGram").master("local[*]").getOrCreate()
02.从Row创建含列名的DF数据
from pyspark.sql.types import Row
df = spark.createDataFrame([Row(inputTokens=["a", "b", "c", "d", "e"])])
df.show()
df.printSchema()
输出结果:
+---------------+
| inputTokens|
+---------------+
|[a, b, c, d, e]|
+---------------+
root
|-- inputTokens: array (nullable = true)
| |-- element: string (containsNull = true)
03.使用NGram,查看连续的组合
from pyspark.ml.feature import NGram
ngram = NGram(inputCol="inputTokens",outputCol="res")
ngram.transform(df).show()
输出结果:
+---------------+--------------------+
| inputTokens| res|
+---------------+--------------------+
|[a, b, c, d, e]|[a b, b c, c d, d e]|
+---------------+--------------------+
04.重新设置参数,并输入结果:
ngram.setParams(n=3)
ngram.transform(df).show()
ngram.transform(df).head(1)
输出结果:
+---------------+--------------------+
| inputTokens| res|
+---------------+--------------------+
|[a, b, c, d, e]|[a b c, b c d, c ...|
+---------------+--------------------+
[Row(inputTokens=['a', 'b', 'c', 'd', 'e'], res=['a b c', 'b c d', 'c d e'])]