0

スパークに新しい。スパーク:行と要素

私は、タイプorg.apache.spark.sql.DataFrame = [id: string, wordList: array<string>]のspark 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を定義した一覧[文字列]リストを取り、短いリストを返し、それを適用したいと考えています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。私のdatabricksはちょうど死んだ、私は今それを試すことはできませんが、それが再び動作するときにそれを試します。質問: "1"を使用する代わりに、何らかの方法で列名を使用できますか? – MichM

+0

このように 'getAs [Seq [String]](" some_name ")。toList'と思います。 –

+0

私が試した答えはエラーでした: 'タイプミスマッチ; found:java.util.List [String] 必須:scala.collection.immutable.List [String] '。コメントのあなたのコードは、しかし、動作します。私はそれを受け入れることができるように、代わりの正解として "(1)"を保持し、元の答えのコードを編集したいですか? – MichM

関連する問題