как получить весь элемент из массива массивов столбцов искры dataframe scala - PullRequest
0 голосов
/ 04 октября 2018

Я работаю с фреймом данных. Df выглядит так:

   root
        |-- array(data1, data2, data3, data4): array (nullable = false)
        |    |-- element: array (containsNull = true)
        |    |    |-- element: struct (containsNull = true)
        |    |    |    |-- k: struct (nullable = false)
        |    |    |    |    |-- v: string (nullable = true)
        |    |    |    |    |-- t: string (nullable = false)
        |    |    |    |-- resourcename: string (nullable = true)
        |    |    |    |-- criticity: string (nullable = true)
        |    |    |    |-- v: string (nullable = true)
        |    |    |    |-- vn: double (nullable = true)

, как описано в df.show () в столбце «Тип данных» Массив содержит четыре массива «data1», «data2», «data3 "," data4 "имеют ту же схему и тип данных, я получаю этот фрейм данных после

   df.withcolumn("Column1",array(col("data1"),col("data2")
   ,col("data3"),col("data4"))

Я хочу получить новый фрейм данных, который содержит все элементы" data1 "," data2 "," data3"и" data4 "в одном массиве.новая схема должна быть:

      |-- data: array (nullable = true)
      |    |-- element: struct (containsNull = true)
      |    |    |-- criticity: string (nullable = true)
      |    |    |-- k: struct (nullable = true)
      |    |    |    |-- t: string (nullable = true)
      |    |    |    |-- v: string (nullable = true)
      |    |    |-- resourcename: string (nullable = true)
      |    |    |-- v: string (nullable = true)
      |    |    |-- vn: double (nullable = true) 

Ответы [ 2 ]

0 голосов
/ 06 августа 2019

Если вы используете Spark> = 2.4, вы можете легко сделать это, используя новую функцию flatten.

flatten (arrayOfArrays) - Преобразует массив массивов водин массив.

0 голосов
/ 05 октября 2018

Рекомендую использовать наборы данных.Вам следует начать с определения трех классов дел:

case class MyClass1(t: String, v: String)
case class MyClass2(criticity:String, c1:MyClass1, resourcename:String, v:String, vn: Double)
case class MyList(data:Seq[Seq[MyClass2]])

Затем создайте свой набор данных следующим образом:

val myDS = df.select(array($"data1",$"data2",$"data3",$"data4").as("data")).as[MyList]
// note than myDS.data has the type: list of lists of MyClass2

// Datasets allow us to make this kind of stuff (flatten data)
val myDSFlatten = myDS.flatMap(_.data)

"myDSFlatten" должен иметь желаемую схему.

Примечаниея использовал Scala.

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