复制Spark Row N次

Rap*_*oth 6 scala apache-spark

我想在DataFrame中复制一行,我该怎么做?

例如,我有一个由1行组成的DataFrame,我想创建一个具有100个相同行的DataFrame.我提出了以下解决方案:

  var data:DataFrame=singleRowDF

   for(i<-1 to 100-1) {
       data = data.unionAll(singleRowDF)
   }
Run Code Online (Sandbox Code Playgroud)

但这引入了许多转换,似乎我的后续行动变得非常缓慢.还有另一种方法吗?

Tza*_*har 17

您可以添加一个文字值为大小为100的数组的列,然后使用它explode来使每个元素创建自己的行; 然后,摆脱这个"虚拟"列:

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

val result = singleRowDF
  .withColumn("dummy", explode(array((1 until 100).map(lit): _*)))
  .selectExpr(singleRowDF.columns: _*)
Run Code Online (Sandbox Code Playgroud)

  • 您可以`drop('dummy)`,而不是更复杂的`selectExpr` (2认同)