I FallklasseSpark-SQL UDF scala unveränderliche Karte mit df.WithColumn Rückkehr()
case class MyCaseClass(City : String, Extras : Map[String, String])
und benutzerdefinierte Funktion haben, die scala.collection.immutable.Map gibt
def extrasUdf = spark.udf.register(
"extras_udf",
(age : Int, name : String) => Map("age" -> age.toString, "name" -> name)
)
aber das bricht mit Ausnahme:
import spark.implicits._
spark.read.options(...).load(...)
.select('City, 'Age, 'Name)
.withColumn("Extras", extrasUdf('Age, 'Name))
.drop('Age)
.drop('Name)
.as[MyCaseClass]
ich Funke SQLs MapType (DataTypes.StringType, DataTypes.IntegerType) 01 verwenden solltenaber ich kann jedes Arbeitsbeispiel nicht gefunden ...
Und das funktioniert, wenn ich scala.collection.Map benutzen, aber ich unveränderlich Karte benötigen
Ist es möglich, ohne/mit UDF, WithColumn() -Ausdruck zu setzen, um 'Age,' Name in map nur zu setzen, wenn sie nicht null sind, weil ich keine Nullwerte in map haben möchte? – fpopic
Sie könnten 'if()' oder einen 'case wenn ... then' Ausdruck verwenden. – Sim