【问题标题】:Spark Scala - How to initialise an empty dataframe with 1000 columnsSpark Scala - 如何初始化一个包含 1000 列的空数据框
【发布时间】:2018-11-28 20:14:15
【问题描述】:

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

在向 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 ....

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

【问题讨论】:

  • 你应该如何生成标签列?你试过什么?
  • 我正在根据列中可用的功能生成标签列。例如:如果我们有一行 (2,3,6),我在 (col2, col3) 处插入 1 和 6 作为标签;然后 1 在 (col3, col6) 和 2 作为标签;最后在 (col2, col6) 和 3 作为标签。
  • 你试过什么?

标签: scala apache-spark dataframe bigdata


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-30
    • 2016-01-29
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2019-06-05
    相关资源
    最近更新 更多