火花:行到元素

spark: row to element

Spark 新手。

我想对 org.apache.spark.sql.DataFrame = [id: string, wordList: array<string>] 类型的 spark DataFrame df 的 "wordList" 列进行一些转换。

我使用数据块。 df 看起来像:

+--------------------+--------------------+
|                  id|            wordList|
+--------------------+--------------------+
|08b0a9b6-3b9a-47a...|                 [a]|
|23c2ef79-8dce-4ad...|[ag, adfg, asdfgg...|
|26a7682f-2ce6-4eb...|[ghe, gener, ghee...|
|2ab530b5-04bc-463...|[bap, pemm, pava,...|
+--------------------+--------------------+

更具体地说,我定义了一个函数 shrinkList(ol: List[String]): List[String] 接受一个列表和 returns 一个较短的列表,并想将它应用到 wordList柱子。问题是,如何将行转换为列表?

df.select("wordList").map(t => shrinkList(t(1)))报错:type mismatch; found : Any required: List[String]

此外,我不确定这里 "t(1)"。我宁愿使用列名而不是索引,以防将来列的顺序发生变化。但我似乎无法使 t$"wordList" 或 t.wordList 或 t("wordList") 工作。因此,除了使用 t(1),select 或者我可以使用什么 select "wordList" 列?

尝试:

df.select("wordList").map(t => shrinkList(t.getSeq[String](0).toList))

df.select("wordList").map(t => shrinkList(t.getAs[Seq[String]]("wordList").toList))