我想在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
....
有什么方法可以继续进行下去吗?
答案 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|
+----+----+----+