首页 > 解决方案 > 在现有 spark 数据集的开头添加一行

问题描述

有没有办法将新 ROW 添加到 spark 中的现有数据集。我知道这withColumn可以帮助添加一个新列。但我想要一个新行到我的数据集中。

现有数据集:

    Dataset<String> uniqData = bookData.mapPartitions(new calculator(), Encoders.STRING());

uniqData 包含以下元素:

amount:10,cycle:400
amount:20,cycle:300
amount:30,cycle:500
new Dataset:

totalcount:20000--new row
amount:10,cycle:400
amount:20,cycle:300
amount:30,cycle:500

标签: apache-spark

解决方案


数据集是不可变的,因此您无法添加任何内容。但是您可以使用包含新行的相同架构创建一个新数据集,然后创建一个旧数据集和新数据集的第三个数据集。

val originalDf = Seq("name: ABC",
  "class: 10",
  "name: ABC1",
  "class: 101",
  "name: ABCw",
  "class: 1019387",
  "name: ABCjdgewk",
  "class: 10118279").toDF()

val newRow = Seq("new row comes here").toDF()

val result = newRow.union(originalDf)
result.show()

印刷

+------------------+
|             value|
+------------------+
|new row comes here|
|         name: ABC|
|         class: 10|
|        name: ABC1|
|        class: 101|
|        name: ABCw|
|    class: 1019387|
|   name: ABCjdgewk|
|   class: 10118279|
+------------------+

当您只有少量数据适合您的一个执行程序(如本例中)时,排序看起来很容易。如果数据分布在集群中,通常不清楚有序的含义。大多数 Spark 转换不会在数据中保持顺序。


推荐阅读