【问题标题】:How to append collection as new column to DataFrame with many columns?如何将集合作为新列附加到具有多列的 DataFrame?
【发布时间】:2019-08-22 04:00:28
【问题描述】:

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

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数据框的行中(每行一个元素)?

【问题讨论】:

  • 感谢@Jacek 的编辑,只是想添加一些东西,有时有些成员会询问我尝试过的内容,甚至stackoverflow 在提问时说请详细说明您的努力和尝试过的内容。如果我不提及我的努力,一些成员会否决,这就是为什么我添加了这么多额外的东西,我也害怕被标记为“重复”:) :)
  • 当然。不用担心。它已经得到了回答,所以这就是我“减少噪音”的原因。玩得开心!

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


【解决方案1】:

让我们将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|
+-------+--------+----+----------+-----+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-24
    • 2017-05-21
    • 2019-06-01
    • 1970-01-01
    • 2019-07-27
    • 2014-12-06
    • 2011-05-03
    • 1970-01-01
    相关资源
    最近更新 更多