Добавьте новые строки в DataFrame Spark, используя scala - PullRequest
1 голос
/ 23 апреля 2020

У меня есть такой фрейм данных:

Name_Index  City_Index
  2.0         1.0
  0.0         2.0
  1.0         0.0

У меня новый список значений.

list(1.0,1.0)

Я хочу добавить эти значения в новую строку в фрейме данных в случае что все предыдущие строки отброшены.

Мой код:

 val spark = SparkSession.builder
      .master("local[*]")
      .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
      .getOrCreate()


    var data = spark.read.option("header", "true")
      .option("inferSchema", "true")
      .csv("src/main/resources/student.csv")

   val someDF = Seq(
         (1.0,1.0)
        ).toDF("Name_Index","City_Index")

   data=data.union(someDF).show()

Это показывает вывод как:

Name_Index  City_Index
  2.0          1.0
  0.0          2.0
  1.0          0.0
  1.1          1.1

Но вывод должен быть таким. Так что все предыдущие строки удаляются и добавляются новые значения.

Name_Index   City_Index
  1.0          1.0

Ответы [ 4 ]

0 голосов
/ 24 апреля 2020

Насколько я вижу, вам нужен только список столбцов из исходного Dataframe.

Если ваша последовательность имеет тот же порядок столбцов, что и исходный Dataframe, вы можете повторно использовать схему, не запрашивая исходный Dataframe. Производительность мудрее, это будет быстрее.

    val srcDf = Seq((2.0,1.0),(0.0,2.0),(1.0,0.0)).toDF("name_index","city_index")

    val dstDf = Seq((1.0, 1.0)).toDF(srcDf.columns:_*)

0 голосов
/ 23 апреля 2020

Вы можете достичь этого, используя функции предела и объединения. проверьте ниже.

scala> val df = Seq((2.0,1.0),(0.0,2.0),(1.0,0.0)).toDF("name_index","city_index")
df: org.apache.spark.sql.DataFrame = [name_index: double, city_index: double]

scala> df.show(false)
+----------+----------+
|name_index|city_index|
+----------+----------+
|2.0       |1.0       |
|0.0       |2.0       |
|1.0       |0.0       |
+----------+----------+


scala> val ndf = Seq((1.0,1.0)).toDF("name_index","city_index")
ndf: org.apache.spark.sql.DataFrame = [name_index: double, city_index: double]

scala> ndf.show
+----------+----------+
|name_index|city_index|
+----------+----------+
|       1.0|       1.0|
+----------+----------+


scala> df.limit(0).union(ndf).show(false) // this is not good approach., you can directly call ndf.show
+----------+----------+
|name_index|city_index|
+----------+----------+
|1.0       |1.0       |
+----------+----------+

0 голосов
/ 23 апреля 2020

Вы можете попробовать этот подход

data = data.filter(_ => false).union(someDF)

вывод

+----------+----------+
|Name_Index|City_Index|
+----------+----------+
|1.0       |1.0       |
+----------+----------+

Я надеюсь, что это даст вам некоторые идеи.

С уважением.

0 голосов
/ 23 апреля 2020

изменить последнюю строку на

data=data.except(data).union(someDF).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...