Как преобразовать столбец типа массива в кадре данных в строку - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть фрейм данных Spark со случайным количеством столбцов. Некоторые из этих столбцов имеют тип array<Int>. Как найти столбцы массива в фрейме данных и преобразовать его в строку?

Например, если поле [1, 2, 3] (массив целых), оно должно быть преобразовано в одну строку {1, 2, 3}.

Процесс:

  df.write
    .format("orc")
    .mode(SaveMode.Overwrite)
    .saveAsTable(s"temp_table")

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

вы можете использовать mkstring в массиве для преобразования в одну строку

val s=Array(1,2,3)
val str=s.mkString(",")

o / p:

str: String = 1,2,3
0 голосов
/ 21 апреля 2020

Вы можете определить столбцы как строковый тип. Что касается того, как преобразовать массив целых чисел в строку:

val a = [1, 2, 3]
val b = a.map(x => x.toString).mkString(",")

b содержит значение, которое вы хотите записать.

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

val colName = df.columns
val colType = df.schema.fields.map(x=>x.dataType).map(x=>x.toString)

colType содержит тип данных, который содержит соответствующий столбец. Обратите внимание, что вам, возможно, придется написать простой парсер для проверки типов данных.

Вы также можете удалить map(x=>x.toString) и затем проверить столбец i^{th}, используя

colType(i).isInstanceOf[org.apache.spark.sql.types.ArrayType]

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