2016-10-18 2 views
0

У меня есть следующий dataframeПреобразование данных в Спарк Scala

+-----+-----+-----+ .......+-------+ 
|item1|item2|item3|........| itemN | 
+-----+-----+-----+........|-------+ 
| v1| v2| v3|........| vN----+ 
| v4| v5| v6|........| v2N---+ 
+-----+-----+-----+........|-------+ 

здесь item1, элемент2 и элемент3 имена столбцов и таблица состоит из 1 строки v1, v2, v3.

Я хочу, чтобы превратить его в

colA colB 
item1 v1 
item2 v2 
item3 v3 
.  . 
.  . 
.  . 

Здесь есть две колонки позволяет сказать колой и colB и строк, как показано на рисунке.

Как сделать это преобразование в искрообразовании с помощью scala?

+0

может пожалуйста вставить код? – mrsrinivas

+0

http://stackoverflow.com/questions/35603689/dataframe-transformation-in-spark-java. Это похоже на ответ, представленный как java-код. Можете ли вы помочь мне с этим в scala, поскольку я новичок в scala? – satyambansal117

ответ

5

Вы можете использовать explode:

import org.apache.spark.sql.functions._ 

input.show() 
// +-----+-----+-----+ 
// |item1|item2|item3| 
// +-----+-----+-----+ 
// | v1| v2| v3| 
// | v4| v5| v6| 
// +-----+-----+-----+ 

val columns: Array[String] = input.columns 

val result = input.explode(columns.map(s => col(s)): _*) { 
    r: Row => columns.zipWithIndex.map { case (name, index) => (name, r.getAs[String](index)) } 
}.select($"_1" as "colA", $"_2" as "colB") 

result.show() 
// +-----+----+ 
// | colA|colB| 
// +-----+----+ 
// |item1| v1| 
// |item2| v2| 
// |item3| v3| 
// |item1| v4| 
// |item2| v5| 
// |item3| v6| 
// +-----+----+ 
+0

Спасибо за приведенный выше код. У меня есть еще один вопрос: если количество столбцов (например, item1, item2 ...... item n) в начальной таблице очень велико, то как это сделать? – satyambansal117

+1

Насколько велика? И почему бы не использовать вышеприведенный код для какого-либо (допустимого) числа столбцов? –

+0

Я не знаю, сколько столбцов изначально позволяет сказать, что есть 100 столбцов. Я думаю, что приведенный выше код принимает в качестве случая переменные i1, i2, i3, соответствующие столбцам, поэтому, если есть много столбцов, как это будет работать? – satyambansal117

Смежные вопросы