我搜索了与此问题相关的其他答案,但它们没有帮助。
我正在尝试将列添加到数据框。此列的数据类型为Seq[CaseClass]
。起初我以为spark可能不支持集合类型列,但事实并非如此。
这是我尝试运行的代码示例。我只想向每行添加一个空的Seq [CaseClass],以后可以附加到该行。
case class Employee(name: String)
val emptyEmployees: Seq[Employee] = Seq()
df.withColumn("Employees", lit(emptyEmployees))
但是后来我得到了与 withColumn
Unsupported literal type class scala.collection.immutable.Nil$ List()
java.lang.RuntimeException: Unsupported literal type classscala.collection.immutable.Nil$ List()
如果您使用的是spark 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
需要的功能会稍有不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句