2017-10-06 5 views
-1

Ich habe ein Spark-Datenframe, das 2 Spalten von der Funktion collect_set gebildet hat. Ich möchte diese 2 Spalten der Sätze in 1 Spalte des Satzes kombinieren. Wie soll ich das machen? Sie sind beide Satz Saitenpyspark - Merge 2 Spalten von Sätzen

Zum Beispiel habe ich zwei Spalten von Aufruf collect_set gebildet

Fruits     | Meat 
[Apple,Orange,Pear]   [Beef, Chicken, Pork] 

Wie kann ich schalten Sie ihn in:

Food 

[Apple,Orange,Pear, Beef, Chicken, Pork] 

Vielen Dank für Ihre Hilfe im Voraus

+1

Bitte geben Sie weitere Informationen wie Struktur des Datenrahmens mit Beispielen –

Antwort

0

Lassen Sie sagen df

+--------------------+--------------------+ 
|    Fruits|    Meat| 
+--------------------+--------------------+ 
|[Pear, Orange, Ap...|[Chicken, Pork, B...| 
+--------------------+--------------------+ 
hat 10

dann

import itertools 
df.rdd.map(lambda x: [item for item in itertools.chain(x.Fruits, x.Meat)]).collect() 

erstellt eine Reihe von Fruits & Meat in einem Satz kombiniert das heißt

[[u'Pear', u'Orange', u'Apple', u'Chicken', u'Pork', u'Beef']] 


hoffe, das hilft!

1

da Sie dataframe als

haben
+---------------------+---------------------+ 
|Fruits    |Meat     | 
+---------------------+---------------------+ 
|[Pear, Orange, Apple]|[Chicken, Pork, Beef]| 
+---------------------+---------------------+ 

Sie können eine udf-Funktion schreiben, um die Sätze von zwei Spalten zu einer zusammenzufassen.

import org.apache.spark.sql.functions._ 
def mergeCols = udf((furits: mutable.WrappedArray[String], meat: mutable.WrappedArray[String]) => furits ++ meat) 

Und dann rufen Sie die udf Funktion als

df.withColumn("Food", mergeCols(col("Fruits"), col("Meat"))).show(false) 

Sie sollten Ihre endgültige dataframe des gewünschten haben

+---------------------+---------------------+------------------------------------------+ 
|Fruits    |Meat     |Food          | 
+---------------------+---------------------+------------------------------------------+ 
|[Pear, Orange, Apple]|[Chicken, Pork, Beef]|[Pear, Orange, Apple, Chicken, Pork, Beef]| 
+---------------------+---------------------+------------------------------------------+ 
+0

Ist dies mit Python? Ich kann nicht scheinen, veränderlich zu finden. WrappedArray – soulless

+0

das ist alles in scala :) –