gpt4 book ai didi

scala - 如何使用scala将Spark DataFrame中的每一行分成多行

转载 作者:行者123 更新时间:2023-12-02 08:19:06 26 4
gpt4 key购买 nike

我有一个包含如下数据的数据框

Key  Today  MTD  QTD  HTD  YTD 
K1 10 20 10 20 50
K2 20 30 20 10 60

我正在寻找类似的输出

Key  PRD     Amt
K1 Today 10
K1 MTD 20
K1 QTD 10
K1 HTD 20
K1 YTD 50

我尝试使用 Pivot,但它提供了其他方式。我不确定我是否可以使用平面 map 或 map ?请指教。

最佳答案

import org.apache.spark.sql._
import spark.implicits._

val list = List(("K1", 10, 20, 10, 20,50), ("K2", 20, 30, 20, 10, 60))
val yourDF = sc.parallelize(list).toDF("Key", "Today", "MTD", "QTD", "HTD", "YTD")

// yourDF.show()
// +---+-----+---+---+---+---+
// |Key|Today|MTD|QTD|HTD|YTD|
// +---+-----+---+---+---+---+
// | K1| 10| 20| 10| 20| 50|
// | K2| 20| 30| 20| 10| 60|
// +---+-----+---+---+---+---+

val newDataFrame = yourDF
.rdd
.flatMap(row => {
val key = row.getString(0)
val todayAmt = row.getInt(1)
val mtdAmt = row.getInt(2)
val qtdAmt = row.getInt(3)
val htdAmt = row.getInt(4)
val ytdAmt = row.getInt(5)

List(
(key, "today", todayAmt),
(key, "MTD", mtdAmt),
(key, "QTD", qtdAmt),
(key, "HTD", htdAmt),
(key, "YTD", ytdAmt)
)
})
.toDF("Key", "PRD", "Amt" )

// newDataFrame.show()
// +---+-----+---+
// |Key| PRD|Amt|
// +---+-----+---+
// | K1|today| 10|
// | K1| MTD| 20|
// | K1| QTD| 10|
// | K1| HTD| 20|
// | K1| YTD| 50|
// | K2|today| 20|
// | K2| MTD| 30|
// | K2| QTD| 20|
// | K2| HTD| 10|
// | K2| YTD| 60|
// +---+-----+---+

关于scala - 如何使用scala将Spark DataFrame中的每一行分成多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042420/

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