给定列号时创建数据框

时间:2018-10-25 16:12:17

标签: scala apache-spark

当我给列号像任何数字'n'时,它应该创建一个具有这么多列数的数据框。当前通常如下所示。

val list = sc.parallelize(List((1, "b", "c", "d"))).toDF()

这将给出4列,但是如果我想将列号作为参数传递并创建一个数据框。

其中包含任何数据或空数据框的列数,请告诉我是否有解决方法。预先感谢

1 个答案:

答案 0 :(得分:0)

鉴于列数n:Int,这将返回一个空数据框:

def createEmptyDf(n:Int) = {
  val df = spark.emptyDataFrame
  (1 to n).foldLeft(df){ case (resDf, i) => resDf.withColumn(s"$i", lit(null))}
}

看到便笺后,您还可以使用以下groupby / pivot进行移调:

val df = (1 to n).map(i => (i, 0)).toDF()
  .groupBy($"_2").pivot($"_1")
  .agg(first(lit(0)))
  .drop($"_2")