根据列数创建新行的新数据帧-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|
+------------+