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| +----+-------+ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |