2017-10-04 1 views
0

Ich habe einen Datenrahmen, die ich verarbeitet worden zu sein wie:Hinzufügen eines Wertes in einem DenseVector in PySpark

+---------+-------+ 
| inputs | temp | 
+---------+-------+ 
| [1,0,0] | 12 | 
+---------+-------+ 
| [0,1,0] | 10 | 
+---------+-------+ 
... 

inputs ist eine Spalte von DenseVectors. temp ist eine Spalte von Werten. Ich möchte den DenseVector mit diesen Werten anfügen und eine Spalte erstellen, aber ich bin nicht sicher, wie ich anfangen soll. Irgendwelche Tipps für diese gewünschte Ausgabe:

+---------------+ 
| inputsMerged | 
+---------------+ 
| [1,0,0,12] | 
+---------------+ 
| [0,1,0,10] | 
+---------------+ 
... 

EDIT: Ich versuche, die VectorAssembler Methode zu verwenden, aber meine resultierende Array wird nicht wie beabsichtigt.

+0

Wie möchten Sie die Werte anhängen? Etwas wie "[1,0,0,12], [0,1,0,10]"? – Psidom

+0

Yup - Ich werde das für Klarheit bearbeiten, aber so würde ich sie mögen. – Kam

Antwort

1

Man könnte so etwas tun:

df.show() 
+-------------+----+ 
|  inputs|temp| 
+-------------+----+ 
|[1.0,0.0,0.0]| 12| 
|[0.0,1.0,0.0]| 10| 
+-------------+----+ 

df.printSchema() 
root 
|-- inputs: vector (nullable = true) 
|-- temp: long (nullable = true) 

Import:

import pyspark.sql.functions as F 
from pyspark.ml.linalg import Vectors, VectorUDT 

UDF Erstellen Sie den Vektor und Element zu verschmelzen:

concat = F.udf(lambda v, e: Vectors.dense(list(v) + [e]), VectorUDT()) 

UDF Nehmen, um Eingaben und Temp Spalten:

merged_df = df.select(concat(df.inputs, df.temp).alias('inputsMerged')) 

merged_df.show() 
+------------------+ 
|  inputsMerged| 
+------------------+ 
|[1.0,0.0,0.0,12.0]| 
|[0.0,1.0,0.0,10.0]| 
+------------------+ 

merged_df.printSchema() 
root 
|-- inputsMerged: vector (nullable = true) 
Verwandte Themen