首页 > 解决方案 > 给定列号时创建数据框

问题描述

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

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

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

包含任何数据或空数据框的列数,如果有办法,请告诉我。提前致谢

标签: scalaapache-spark

解决方案


给定列数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")

推荐阅读