首页 > 解决方案 > Spark Tokenize 整个 DataFrame 不是单行

问题描述

我有多个文本文件读入 Spark Dataframe(假设为单列)。我想使用 Tokenizer 但不是对每一行单独使用,而是对每一行使用。

例如要知道在所有文本(行)中出现次数最多的单词

+--------------------+--------------------+------+
|               value|               words|tokens|
+--------------------+--------------------+------+
|a b ...             |[a, b, ...          |  1072|
|a c ...             |[a, c, ...          |  1045|

所以代替上面的,我想要:

+--------------------+--------------------+------+
|               value|               words|tokens|
+--------------------+--------------------+------+
|a b c...            |[a, b, c...         |  x   |

我的相关代码:

val corpus = spark.read.text("...")

val tokenizer = new Tokenizer().setInputCol("value").setOutputCol("words")

val countTokens = udf { (words: Seq[String]) => words.length }

val tokenized = tokenizer.transform(corpus)

tokenized.select("value", "words")
  .withColumn("tokens", countTokens(col("words"))).show()

标签: scalaapache-sparkapache-spark-sql

解决方案


推荐阅读