2016-12-07 3 views
1

Я хочу знать, как я могу «объединить» несколько столбцов данных в один массив строк?Как преобразовать столбцы DataFrame Spark в один столбец строкового массива

К примеру, у меня есть этот dataframe:

val df = sqlContext.createDataFrame(Seq((1, "Jack", "125", "Text"), (2,"Mary", "152", "Text2"))).toDF("Id", "Name", "Number", "Comment") 

который выглядит следующим образом:

scala> df.show 
+---+----+------+-------+ 
| Id|Name|Number|Comment| 
+---+----+------+-------+ 
| 1|Jack| 125| Text| 
| 2|Mary| 152| Text2| 
+---+----+------+-------+ 

scala> df.printSchema 
root 
|-- Id: integer (nullable = false) 
|-- Name: string (nullable = true) 
|-- Number: string (nullable = true) 
|-- Comment: string (nullable = true) 

Как я могу преобразовать его так, что это будет выглядеть так:

scala> df.show 
+---+-----------------+ 
| Id|    List| 
+---+-----------------+ 
| 1| [Jack,125,Text]| 
| 2| [Mary,152,Text2]| 
+---+-----------------+ 

scala> df.printSchema 
root 
|-- Id: integer (nullable = false) 
|-- List: Array (nullable = true) 
| |-- element: string (containsNull = true) 

ответ

6

Использовать org.apache.spark.sql.functions.array:

import org.apache.spark.sql.functions._ 
val result = df.select($"Id", array($"Name", $"Number", $"Comment") as "List") 

result.show() 
// +---+------------------+ 
// |Id |List    | 
// +---+------------------+ 
// |1 |[Jack, 125, Text] | 
// |2 |[Mary, 152, Text2]| 
// +---+------------------+ 
+0

Спасибо. Это правильный ответ. Но, продвигаясь вперед, я столкнулся с следующей проблемой. Это не связано конкретно, поэтому я создал новый вопрос. Проверьте это, может быть, вы снова можете мне помочь: http://stackoverflow.com/questions/41245227/spark-dataframe-schema-definition-using-reflection-with-case-classes-and-column –

+0

хороший ответ, это помогает меня МНОГО! –

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