Если вы используете искру 2.2+, просто измените lit()
на typedLit()
, в соответствии с этим ответом.
case class Employee(name: String)
val emptyEmployees: Seq[Employee] = Seq()
val df = spark.createDataset(Seq("foo")).toDF("foo")
df.withColumn("Employees", typedLit(emptyEmployees)).show()
показывает нам:
+---+---------+
|foo|Employees|
+---+---------+
|foo| []|
+---+---------+
Обновление
Для версии 2.1 приведенный выше ответ для этой версии работает путем преобразования вашего lit(Array)
в array()
из lit()
s (с некоторым магическим синтаксисом scala).В вашем случае это будет работать, потому что массив пуст.
def asLitArray[T](xs: Seq[T]) = array(xs map lit: _*)
case class Employee(name: String)
val emptyEmployees: Seq[Employee] = Seq()
val df = spark.createDataset(Seq("foo")).toDF("foo")
df.withColumn("Employees", asLitArray(emptyEmployees)).show()
Который имеет тот же результат:
+---+---------+
|foo|Employees|
+---+---------+
|foo| []|
+---+---------+
Чтобы что-то иметь в вашем Seq
, потребуется немногодругая функция.