gpt4 book ai didi

apache-spark - spark dataframe 将列名连接到值

转载 作者:行者123 更新时间:2023-12-02 06:29:20 24 4
gpt4 key购买 nike

我有一个数据框,我想以每一行的方式进行修改将包含列名。例如:

FirstName LastName
Jhon Doe
David Lue

创建以下内容

(FirstName=Jhon,LastName=Doe)
(FirstName=David,LastName=Lue)

我设法用 2 列为 df 做

val x = df.map { row => (names(0) + "=" +row(0) , names(1)+"="+rows(1)}

但是我怎样才能对任意数量的列使用 for 循环呢?

谢谢

最佳答案

一种选择是在列名上使用 foldLeft:

import org.apache.spark.sql.functions._
import org.apache.spark.sql.DataFrame

import sqlContext.implicits._
val df = Seq(
("John", "Doe"),
("David", "Lue")
).toDF("first_name", "last_name")

val x = df.columns.foldLeft(df) {
(acc: DataFrame, colName: String) =>
acc.withColumn(colName, concat(lit(colName + "="), col(colName)))
}

x.show()

导致:

+----------------+-------------+
| first_name| last_name|
+----------------+-------------+
| first_name=John|last_name=Doe|
|first_name=David|last_name=Lue|
+----------------+-------------+

如果您随后想将其转换为元组的 RDD,您可以在其上调用映射:

x.rdd.map(r => (r.getString(0), r.getString(1)))

甚至使用 Spark SQL 的类型化 API:

x.as[(String, String)].rdd

关于apache-spark - spark dataframe 将列名连接到值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44031585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com