簡體   English   中英

我如何在 Scala dataframe 中重復每一行 N 次

[英]How would I repeat each row in a Scala dataframe N times

這是 dataframe 的前身:

在此處輸入圖像描述

這是之后:

在此處輸入圖像描述

注意重復的行是如何彼此相鄰的,而不是最后從頭開始 dataframe。

謝謝

嘗試使用帶有struct array_repeatarray_repeat ,然后分解數組。

Example:

df.show()
/*
+----+----+
|col1|col2|
+----+----+
|   1|   4|
|   2|   5|
|   3|   6|
+----+----+
*/
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._

df.withColumn("arr",explode(array_repeat(struct(df.columns.head,df.columns.tail:_*),7))).
select("arr.*").
toDF("col1","col2").
show(100,false)
/*
+----+----+
|col1|col2|
+----+----+
|1   |4   |
|1   |4   |
|1   |4   |
|1   |4   |
|1   |4   |
|1   |4   |
|1   |4   |
|2   |5   |
|2   |5   |
|2   |5   |
|2   |5   |
|2   |5   |
|2   |5   |
|2   |5   |
|3   |6   |
|3   |6   |
|3   |6   |
|3   |6   |
|3   |6   |
|3   |6   |
|3   |6   |
+----+----+
*/

這是一個 function ,它復制了一個DataFrame

def repeatRows(df: DataFrame, numRepeats: Int): DataFrame = {
    (1 until numRepeats).foldLeft(df)((growingDF, _) => growingDF.union(df))
}

對生成的DataFrame進行排序的問題與復制過程是分開的,因此不包含在 function 中,但之后可以輕松實現。

所以讓我們來看看你的問題:

// Problem setup
val someDF = Seq((1,4),(2,4),(3,6)).toDF("col1","col2")

// Duplicate followed by sort
val duplicatedSortedDF = repeatRows(someDF, 3).sort("col1")

// Show result
duplicatedSortedDF.show()
+----+----+
|col1|col2|
+----+----+
|   1|   4|
|   1|   4|
|   1|   4|
|   2|   4|
|   2|   4|
|   2|   4|
|   3|   6|
|   3|   6|
|   3|   6|
+----+----+

你有它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM