0

Spark的新功能。spark:row to element

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

我使用dataBricks。 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:列表[字符串]):列表[字符串]是获得一个列表,并返回一个短名单,并想在应用它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),我可以使用什么选择器来选择“wordList”列?

回答

1

尝试:

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

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

感谢@LostInOverflow。我的数据块刚刚死了,现在我不能尝试,但是当它再次工作时会尝试它。问题:我可以用某种方式使用列名而不是使用“1”吗? – MichM

+0

像这样'getAs [Seq [String]](“some_name”)。toList'我想。 – 2016-08-02 21:50:30

+0

我试过的答案给出了错误:'type mismatch; found:java.util.List [String] required:scala.collection.immutable.List [String]'。你的代码在评论中起作用。你是否想在原始答案中编辑代码,并保留“(1)”作为另一个正确的答案,以便我可以接受它? – MichM

相关问题