首页 > 解决方案 > Spark Scala - 如何初始化一个包含 1000 列的空数据框

问题描述

我想在 Spark (Scala) 中初始化一个空的 DataFrame。DataFrame 中的列数必须为 1000 和一个附加的 Label 列,并且最初数据框应该是空的。

在向 DataFrame 插入新行时,我必须根据列表值仅在特定列中插入值。

如果我的清单是 val myList = List(List(4), List(2,3,6), List(5,8)...)

我希望我的数据框包含如下值:

Id col1 col2 col3 col4 col5 col6 col7 col8.... col1000 Label 1 0 0 0 1 0 0 0 0 0 x 2 0 1 1 0 0 1 0 0 0 y 3 0 0 0 0 1 0 0 1 0 x ....

有什么方法可以让我继续这样做吗?

标签: scalaapache-sparkdataframebigdata

解决方案


Sparkdataframes是不可变的,因此无法追加/插入行。相反,您可以dataframe使用 single创建新的row并使用UNIONALL并将其附加到原始文件并再次分配给原始文件,例如

var df1=Seq((1,0,1),(0,0,0)).toDF("col1","col2","col3")

val df2=Seq((1,1,1)).toDF("col1","col2","col3")

df1=df1.unionAll(df2)

如果你有

scala> df1.show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   0|   1|
|   0|   0|   0|
+----+----+----+

scala> df2.show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   1|   1|
+----+----+----+

然后你可以这样做

df1=df1.unionAll(df2)

输出:

scala> df1.show
+----+----+----+
|col1|col2|col3|
+----+----+----+
|   1|   0|   1|
|   0|   0|   0|
|   1|   1|   1|
+----+----+----+

推荐阅读