scala - 如何将集合作为新列附加到具有许多列的 DataFrame?

标签 scala dataframe apache-spark functional-programming apache-spark-sql

我想将新列附加(添加)到具有多列的现有数据框。

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

你可以使用RDDzip方法:

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/

相关文章:

scala - 从 scala 脚本退出 Spark-shell

scala - PySpark 等效于来自 Scala API 的函数 "typedLit"

apache-spark - Spark 的客户端模式下,驱动需要网络访问远程执行器?

scala - 如何在 Spark/Scala 中显示预测、标签和数据框列?

r - 在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?

python - 在 Pandas 数据框中的两个日期时间列中获得差异

python - 提取括号之间的文本并为每个文本位创建行

scala - 在 Scala 中,如何重新分配元组值?

scala - Scala 和 Apache Spark 上的 csv 中的空值

scala - 存在类型和类型成员