Есть ли встроенная Spark, которая выравнивает вложенные массивы? - PullRequest
0 голосов
/ 19 января 2019

У меня есть поле DataFrame, которое является Seq[Seq[String]] Я построил UDF для преобразования указанного столбца в столбец Seq [String];в основном, UDF для функции flatten из Scala.

def combineSentences(inCol: String, outCol: String): DataFrame => DataFrame = {

    def flatfunc(seqOfSeq: Seq[Seq[String]]): Seq[String] = seqOfSeq match {
        case null => Seq.empty[String]
        case _ => seqOfSeq.flatten
    }
    df: DataFrame => df.withColumn(outCol, udf(flatfunc _).apply(col(inCol)))
}

Мой вариант использования - строки, но, очевидно, это может быть общим.Вы можете использовать эту функцию в цепочке преобразований DataFrame, таких как:

df.transform(combineSentences(inCol, outCol))

Есть ли встроенная функция Spark, которая делает то же самое?Я не смог найти один.

1 Ответ

0 голосов
/ 20 января 2019

Существует аналогичная функция (начиная с версии Spark 2.4), и она называется flatten:

import org.apache.spark.sql.functions.flatten

С официальной документацией :

def flatten(e: Column): Column

Создает один массив из массива массивов. Если структура вложенных массивов глубже двух уровней, удаляется только один уровень вложенности.

С

2.4.0

Чтобы получить точный эквивалент, вам нужно будет coalesce заменить NULL.

...