spark 数据帧中的分词器 API
tokenizer in spark dataframe API
Spark 数据帧的每一行 df
在列 rawFV
中包含一个制表符分隔的字符串。我已经知道在选项卡上拆分将为所有行生成 array of 3 strings
。这可以通过以下方式验证:
df.map(row => row.getAs[String]("rawFV").split("\t").length != 3).filter(identity).count()
并确保计数确实是 0
。
我的问题是:如何使用管道 API?
这是我尝试过的:
val tabTok = new RegexTokenizer().setInputCol("rawFV").setOutputCol("tk").setPattern("\t")
val pipeline = new Pipeline().setStages(Array(tabTok))
val transf = pipeline.fit(df)
val df2 = transf.transform(df)
df2.map(row => row.getAs[Seq[String]]("tk").length != 3).filter(identity).count()
不等于 0
.
问题与缺失值的存在有关。例如:
带有 RegexTokenizer
的管道代码将在第一行 return 3 个字段,但在第二行只有 2 个。另一方面,第一个代码会正确 return 3 个字段。
这是预期的行为。默认情况下 minTokenLength
参数等于 1 以避免输出中出现空字符串。如果你想 return 空字符串,它应该设置为 0。
new RegexTokenizer()
.setInputCol("rawFV")
.setOutputCol("tk")
.setPattern("\t")
.setMinTokenLength(0)
Spark 数据帧的每一行 df
在列 rawFV
中包含一个制表符分隔的字符串。我已经知道在选项卡上拆分将为所有行生成 array of 3 strings
。这可以通过以下方式验证:
df.map(row => row.getAs[String]("rawFV").split("\t").length != 3).filter(identity).count()
并确保计数确实是 0
。
我的问题是:如何使用管道 API?
这是我尝试过的:
val tabTok = new RegexTokenizer().setInputCol("rawFV").setOutputCol("tk").setPattern("\t")
val pipeline = new Pipeline().setStages(Array(tabTok))
val transf = pipeline.fit(df)
val df2 = transf.transform(df)
df2.map(row => row.getAs[Seq[String]]("tk").length != 3).filter(identity).count()
不等于 0
.
问题与缺失值的存在有关。例如:
带有 RegexTokenizer
的管道代码将在第一行 return 3 个字段,但在第二行只有 2 个。另一方面,第一个代码会正确 return 3 个字段。
这是预期的行为。默认情况下 minTokenLength
参数等于 1 以避免输出中出现空字符串。如果你想 return 空字符串,它应该设置为 0。
new RegexTokenizer()
.setInputCol("rawFV")
.setOutputCol("tk")
.setPattern("\t")
.setMinTokenLength(0)