#arrays #scala #dataframe #apache-spark #nested
#массивы #scala #фрейм данных #apache-spark #вложенный
Вопрос:
У меня есть фрейм данных с 2 столбцами.Я хочу удалить первый массив вложенного массива в каждой записи. Пример:- У меня есть DF, подобный этому
--- ------- -------- ----------- -------------
|id |arrayField |
--- ------------------------------------------
|1 |[[Akash,Kunal],[Sonu,Monu],[Ravi,Kishan]] |
|2 |[[Kunal, Mrinal],[Priya,Diya]] |
|3 |[[Adi,Sadi]] |
--- ------- --------- ---------- -------------
и я хочу, чтобы мой вывод выглядел следующим образом:-
--- ------- ------ ------ -------
|id |arrayField |
--- -----------------------------
|1 |[[Sonu,Monu],[Ravi,Kishan]] |
|2 |[[Priya,Diya]] |
|3 | null |
--- ------- ------ ------ -------
Ответ №1:
Из Spark-2.4 используйте slice
функцию.
Example:
df.show(10,false)
/*
------------------------
|arrayField |
------------------------
|[[A, k], [s, m], [R, k]]|
|[[k, M], [c, z]] |
|[[A, b]] |
------------------------
*/
import org.apache.spark.sql.functions._
df.withColumn("sliced",expr("slice(arrayField,2,size(arrayField))")).
withColumn("arrayField",when(size(col("sliced"))==0,lit(null)).otherwise(col("sliced"))).
drop("sliced").
show()
/*
----------------
| arrayField|
----------------
|[[s, m], [R, k]]|
| [[c, z]]|
| null|
----------------
*/