Как добавить элемент в массив в Spark 2.3 - PullRequest
0 голосов
/ 09 февраля 2019

Как я могу добавить элемент в массив в фрейме данных (spark 2.3)?

Вот пример с целыми числами, но реальный случай со структурой.

Ввод:

+------+-------------+
|   key|     my_arr  |
+------+-------------+
|5     |[3,14]       |
|3     |[9,5.99]     |
+------+-------------+

вывод:

+-------------+
|     my_arr  |
+-------------+
|[3,14,5]     |
|[9,5.99,3]   |
+-------------+

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Вот еще один способ использования Struct:

Ввод:

df.show()
+---+--------+
|Key|My_Array|
+---+--------+
|  5|  [3,14]|
|  3|  [9,45]|
+---+--------+

df.withColumn("My_Array", struct($"My_Array.*", $"Key")).show(false)

Выход:

+---+--------+
|Key|My_Array|
+---+--------+
|5  |[3,14,5]|
|3  |[9,45,3]|
+---+--------+  
0 голосов
/ 10 февраля 2019

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

С целыми числами код:

`

 val udfConcat = udf((key:Int,my_arr:WrappedArray[Int])=> my_arr:+key)
     df.withColumn("my_arr",udfConcat(col("key"), col("my_arr"))).drop("key").show()

`

С кодом структуры:

`

val schemaTyped = new StructType()
      .add("name", StringType)
      .add("age", IntegerType)
    val schema = ArrayType(schemaTyped)
    val udfConcatStruct = udf((key: Row, my_arr: Seq[Row]) => my_arr :+ key, schema)
    df2.withColumn("my_arr", udfConcatStruct(col("key"), col("my_arr"))).drop("key").show(false)

`

Когда вы создаете udf, вы должны передать схему de Array,в этом примере это массив элементов с именами и возрастами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...