Spark Scala-如何初始化具有1000列的空数据框

时间:2018-06-19 19:26:57

标签: scala apache-spark dataframe bigdata

我想在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 ....

有什么方法可以继续进行下去吗?

1 个答案:

答案 0 :(得分:0)

Spark dataframes是不可变的,因此无法追加/插入行。相反,您可以仅使用单个dataframe创建新的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|
+----+----+----+