Ich habe versucht, eine dynamische Version von org.apache.spark.sql.explode
arbeiten ohne Glück: Ich habe ein Dataset mit einer Datumsspalte namens event_date
und eine andere Spalte namens no_of_days_gap
. Ich möchte no_of_days_gap
verwenden, um Klone der Zeile unter Verwendung der explode
-Funktion zu erstellen. Einer meiner ersten Versuche war diese zu verwenden:Wie explodiert man mit einem Spaltenwert?
myDataset.withColumn("clone", explode(array((0 until col("no_of_days_gap")).map(lit): _*)))
jedoch col("no_of_days_gap")
ist vom Typ Column
und ein Int
erwartet. Ich habe auch verschiedene andere Ansätze ausprobiert. Wie kann ich das funktionieren?
P. S .: Ich schaffte es, eine alternative Lösung mit einer map
Funktion durch den Aufruf flatMap
gefolgt arbeiten zu bekommen, bin ich jedoch zu verstehen, wie wirklich interessiert arbeitet den withColumn
Ansatz zu bekommen.
In Funken Shell dies einen Fehler zurückgibt: '' 'scala> val range = UDF ((i: Integer) => (0 bis i) .toSeq) scala.MatchError: scala. collection.immutable.Range (der Klasse scala.reflect.internal.Types $ ClassNoArgsTypeRef) bei org.apache.spark.sql.catalyst.ScalaReflection $ .schemaFor (ScalaReflection.scala: 692) bei org.apache.spark.sql .catalyst.ScalaReflection $ .schemaFor (ScalaReflection.scala: 671) bei org.apache.spark.sql.functions $ .udf (functions.scala: 3072) ... 48 elided''' – Diddy