Преобразовать массив> введитев скале - PullRequest
0 голосов
/ 03 февраля 2019

Я столкнулся с проблемой при преобразовании столбца в моем фрейме данных в строковый формат.Пример кадра данных выглядит следующим образом:

-- example_code_b: string (nullable = true)
-- example_code: array (nullable = true)
[info]  |    |-- element: map (containsNull = true)
[info]  |    |    |-- key: string
[info]  |    |    |-- value: string (valueContainsNull = true)

Я хочу преобразовать example code в (string,string) формат из текущего array(map(string,string)).

Входные данные имеют вид [Map(entity -> PER), Map(entity -> PER)], и я хочу, чтобы выходные данные имели вид PER,PER

Ответы [ 2 ]

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

Вы можете просто использовать функцию explode для любого столбца массива, которая будет создавать отдельные строки для каждого значения массива.

val newDF = df.withColumn("mymap" explode(col("example_code")))
0 голосов
/ 03 февраля 2019

вы можете сделать UDF в DataFrame API или использовать Dataset-API для этого:

import spark.implicits._

df
  .as[Seq[Map[String,String]]]
  .map(s => s.reduce(_ ++ _))
  .toDF("example_code")
  .show()

Обратите внимание, что это не учитывает случай нескольких ключей, они не «объединены», а простоперезаписаны

...