Scala -使用for comprehension从列表中创建只有一行的数据框架

roqulrg3  于 2023-08-05  发布在  Scala
关注(0)|答案(1)|浏览(121)

由于一些奇怪的原因,我需要获取 Dataframe 的列名并将其插入第一行(我不能只导入没有标题的数据)。我尝试使用for comprehension创建一个只有1行30列(有30个标题)的 Dataframe ,并将其联合到原始 Dataframe 。但是我得到的是一个只有1行和1列的 Dataframe ,其值是30个字符串的列表。
我尝试的是:

val headerDF = Seq((for (col <- data.columns) yield col)).toDF
display(headerDF)

字符串
| Column A |
| ------------ |
| ["col1", "col2", "col3", ...] |
预期行为:
| B栏|B栏| Column B |
| --|--| ------------ |
| col2| Col3| Col3 |

m3eecexj

m3eecexj1#

一种解决方案是使用spark.range(1)创建一个单行 Dataframe ,然后像这样为每个列名创建一个列:

// a random dataframe with 4 columns
val df = Seq(("a", "b", "c", "d")).toDF("A", "B", "C", "D")
df.show

x

+---+---+---+---+
|  A|  B|  C|  D|
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+
val header = spark.range(1).select(df.columns.map(c => lit(c) as c) : _*)
df.union(header).show
+---+---+---+---+
|  A|  B|  C|  D|
+---+---+---+---+
|  a|  b|  c|  d|
|  A|  B|  C|  D|
+---+---+---+---+

的数据

相关问题