Как получить транспонирование динамического набора данных для примера ввода ниже, используя Spark и Java - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть один набор данных, и я хочу переставить столбцы (динамическое число столбцов) в две строки, всегда используя Spark и Java.

Пример ввода:

+-------+-------+---------+
|titanic|IronMan|Juglebook|
+-------+-------+---------+
|    101|  test1|       10|
|    102|  test2|       20|
|    103|  test3|       30|
+-------+-------+---------+

Пример вывода:

|    Colname|colvalue       
+---------+----+----+---------+     
|   titanic| 101,102,103      |     
|  IronMan | test1,test2,test3|     
|Juglebook |  10,20,30        |     
+-------+-------+-------------+

Я пробовал с помощью spark sql, но он становится жестко закодированным.

1 Ответ

1 голос
/ 12 апреля 2019

Учитывая ваш запрос на перенос столбцов в строки, одна проблема, с которой вы можете столкнуться, заключается в том, что ваши значения должны быть в строке, а не в Int. сначала вам нужно привести все ваши значения в строку. Предполагая, что часть сделана здесь, вы можете использовать trnapose и использовать struct, чтобы получить то, что вы хотите

Ниже приведена реализация Scala

 Import org.apache.spark.sql.funtions._
def transpose(transDF:DataFrame) :DataFrame ={
cols1= transDF.dtypes.unzip
cols2= cols1._1
val KVS = explode(
array(cols2.map(c =>struct(lit(c).alias("column_name"), col(c).alias("column_Value"))
):_*))
transDF.Select(kvs.alias("_kvs"))
}

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

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