0

Neu zu Spark.spark: Zeile zu Element

Ich möchte eine Transformation in der "WordList" -Spalte eines Funken DataFrame, df, des Typs org.apache.spark.sql.DataFrame = [id: string, wordList: array<string>] machen.

Ich benutze DataBricks. df wie folgt aussieht:

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

Genauer gesagt, habe ich eine Funktion shrinkList definiert haben (ol: Liste [String]): Liste [Zeichenfolge], die eine Liste nimmt und eine kürzere Liste, und möchte es anzuwenden auf die Wortlistenspalte. Die Frage ist, wie konvertiere ich die Zeile in eine Liste?

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

Auch bin ich über "t (1)" hier nicht sicher. Ich würde lieber den Spaltennamen anstelle des Indexes verwenden, falls sich die Reihenfolge der Spalten in der Zukunft ändert. Aber ich kann nicht scheinen, dass t $ "wordList" oder t.wordList oder t ("wordList") funktioniert. Anstatt mit t (1), welchen Selektor kann ich verwenden, um die Spalte "wordList" auszuwählen?

Antwort

1

Versuchen:

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

oder

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

Dank @LostInOverflow. Meine Databricks sind gerade gestorben und ich kann es jetzt nicht versuchen, werde es aber versuchen, wenn es wieder funktioniert. Frage: Kann ich den Spaltennamen nicht anstelle von "1" verwenden? – MichM

+0

Wie diese 'getAs [Seq [String]] (" irgendein_Name "). ToList' Ich denke. –

+0

Die Antwort, die ich versuchte gab Fehler: 'Typ Mismatch; gefunden: java.util.List [String] erforderlich: scala.collection.immutable.List [String] '. Dein Code im Kommentar funktioniert jedoch. Möchten Sie den Code in Ihrer ursprünglichen Antwort bearbeiten und dabei die "(1)" als alternative richtige Antwort beibehalten, damit ich sie akzeptieren kann? – MichM