加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Apache Spark如何将列/数组中的新列附加到Spark数据帧

发布时间:2020-12-16 18:19:16 所属栏目:安全 来源:网络整理
导读:我正在使用Apache Spark 2.0 Dataframe / Dataset API 我想从List of values向我的数据框添加一个新列.我的列表具有与给定数据帧相同数量的值. val list = List(4,5,10,7,2)val df = List("a","b","c","d","e").toDF("row1") 我想做的事情如下: val appende
我正在使用Apache Spark 2.0 Dataframe / Dataset API
我想从List of values向我的数据框添加一个新列.我的列表具有与给定数据帧相同数量的值.

val list = List(4,5,10,7,2)
val df   = List("a","b","c","d","e").toDF("row1")

我想做的事情如下:

val appendedDF = df.withColumn("row2",somefunc(list))
df.show()
// +----+------+
// |row1 |row2 |
// +----+------+
// |a    |4    |
// |b    |5    |
// |c    |10   |
// |d    |7    |
// |e    |2    |
// +----+------+

对于任何想法我会很高兴,我的数据帧实际上包含更多列.

解决方法

你可以这样做:

import org.apache.spark.sql.Row
import org.apache.spark.sql.types._    

// create rdd from the list
val rdd = sc.parallelize(List(4,2))
// rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[31] at parallelize at <console>:28

// zip the data frame with rdd
val rdd_new = df.rdd.zip(rdd).map(r => Row.fromSeq(r._1.toSeq ++ Seq(r._2)))
// rdd_new: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row] = MapPartitionsRDD[33] at map at <console>:32

// create a new data frame from the rdd_new with modified schema
spark.createDataFrame(rdd_new,df.schema.add("new_col",IntegerType)).show
+----+-------+
|row1|new_col|
+----+-------+
|   a|      4|
|   b|      5|
|   c|     10|
|   d|      7|
|   e|      2|
+----+-------+

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读