我想将新列附加(添加)到具有多列的现有数据框。
val a = Seq(
("10", "MILLER", "1300", "2017-11-03"),
("30", "Martin", "1250", "2017-11-21")).toDF("dept_no","emp_name","sal","date")
scala> a.show
+-------+--------+----+----------+
|dept_no|emp_name| sal| date|
+-------+--------+----+----------+
| 10| MILLER|1300|2017-11-03|
| 30| Martin|1250|2017-11-21|
+-------+--------+----+----------+
对于上面的数据框,我想添加集合的每个元素(无论是常规的 Scala 集合还是另一个单列数据框),例如
val lst = List("10", "Susan")
如何将上面的 lst
的元素添加到 a
数据帧的行中(每行一个元素)?
最佳答案
让我们将 lst
转换为 DataFrame:
val lst = List("10", "Susan").toDF
你可以使用RDD
的zip
方法:
import org.apache.spark.sql.Row
val data = a.rdd.zip(lst.rdd).map { case (l, r) => Row.fromSeq(l.toSeq ++ r.toSeq) }
import org.apache.spark.sql.types.StructType
val schema = StructType(a.schema.fields ++ lst.schema.fields)
val solution = spark.createDataFrame(data, schema)
scala> solution.show
+-------+--------+----+----------+-----+
|dept_no|emp_name| sal| date|value|
+-------+--------+----+----------+-----+
| 10| MILLER|1300|2017-11-03| 10|
| 30| Martin|1250|2017-11-21|Susan|
+-------+--------+----+----------+-----+
关于scala - 如何将集合作为新列附加到具有许多列的 DataFrame?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55447455/