Spark Scala - удалить первый элемент из массива в dataframe - PullRequest
0 голосов
/ 21 октября 2019

У меня есть следующий фрейм данных

+--------------------+
|        values      |
+--------------------+
|[[1,1,1],[3,2,4],[1,|
|[[1,1,2],[2,2,4],[1,|
|[[1,1,3],[4,2,4],[1,|

Я хочу столбец с хвостом списка. Пока я знаю, как выбрать первый элемент val df1 = df.select("values").getItem(0), но есть ли метод, который позволил бы мне отбросить первый элемент?

Ответы [ 2 ]

1 голос
/ 21 октября 2019

Если UDF не является предпочтительным, рассмотрите возможность использования posexplode с последующим фильтром и groupBy:

val df = Seq((1, Seq(1, 2, 3)), (2, Seq(4, 5))).toDF("c1", "c2")

df.
  select($"c1", posexplode($"c2")).where($"pos" > 0).
  groupBy("c1").agg(collect_list($"col").as("c2tail")).
  show
// +---+------+
// | c1|c2tail|
// +---+------+
// |  1|[2, 3]|
// |  2|   [5]|
// +---+------+
1 голос
/ 21 октября 2019

Я не думаю, что для этого существует встроенный оператор. Но вы можете использовать UDF, например:

import collection.mutable.WrappedArray
def tailUdf = udf((array: WrappedArray[WrappedArray[Int]])=> array.tail)
df.select(tailUdf(col("value"))).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...