根据列数创建新行的新数据帧-Spark Scala
我有一个包含以下数据的数据框:根据列数创建新行的新数据帧-Spark Scala,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我有一个包含以下数据的数据框: num_cta | n_lines 110000000000| 2 110100000000| 3 110200000000| 1 有了这些信息,我需要创建一个新的DF,根据n_行列上的值,使用不同的行数 例如,对于我的DF的第一行(110000000000),n_行列的值是2。结果必须如下所示: num_cta 110000000000 110000000000 对于我展示的所有Dataframe示例,要获得的结果必须如下所示:
num_cta | n_lines
110000000000| 2
110100000000| 3
110200000000| 1
有了这些信息,我需要创建一个新的DF,根据n_行列上的值,使用不同的行数
例如,对于我的DF的第一行(110000000000),n_行列的值是2。结果必须如下所示:
num_cta
110000000000
110000000000
对于我展示的所有Dataframe示例,要获得的结果必须如下所示:
num_cta
110000000000
110000000000
110100000000
110100000000
110100000000
110200000000
有办法吗?并根据列值的值,将一行乘以n次
问候。没有现成的方法可以做到这一点。但是,您可以尝试迭代数据帧并返回num_cta列表,其中元素的数量等于相应的n_行 差不多
import spark.implicits._
case class (num_cta:String) // output dataframe schema
case class (num_cta:String, n_lines:Integer) // input dataframe 'df' schema
val result = df.flatmap(x => {
List.fill(x.n_lines)(x.num_cta)
}).toDF
没有现成的方法可以做到这一点。但是,您可以尝试迭代数据帧并返回num_cta列表,其中元素的数量等于相应的n_行 差不多
import spark.implicits._
case class (num_cta:String) // output dataframe schema
case class (num_cta:String, n_lines:Integer) // input dataframe 'df' schema
val result = df.flatmap(x => {
List.fill(x.n_lines)(x.num_cta)
}).toDF
一种方法是将
n_行
扩展到一个带有UDF的数组中,然后分解它:
val df = Seq(
("110000000000", 2),
("110100000000", 3),
("110200000000", 1)
)toDF("num_cta", "n_lines")
def fillArr = udf(
(n: Int) => Array.fill(n)(1)
)
val df2 = df.withColumn("arr", fillArr($"n_lines")).
withColumn("a", explode($"arr")).
select($"num_cta")
df2.show
+------------+
| num_cta|
+------------+
|110000000000|
|110000000000|
|110100000000|
|110100000000|
|110100000000|
|110200000000|
+------------+
一种方法是将n_行
扩展到一个带有UDF的数组中,然后分解它:
val df = Seq(
("110000000000", 2),
("110100000000", 3),
("110200000000", 1)
)toDF("num_cta", "n_lines")
def fillArr = udf(
(n: Int) => Array.fill(n)(1)
)
val df2 = df.withColumn("arr", fillArr($"n_lines")).
withColumn("a", explode($"arr")).
select($"num_cta")
df2.show
+------------+
| num_cta|
+------------+
|110000000000|
|110000000000|
|110100000000|
|110100000000|
|110100000000|
|110200000000|
+------------+