Come accedere all'elemento vettoriale spark sparse
Sep 11 2020
Ho una colonna vettoriale sparsa ottenuta tramite OneHotEncoder in un dataframe spark, sostanzialmente simile a questa che mostra le prime 10 righe:
+------------------------------------+
|check_indexed_encoded |
+------------------------------------+
| (3,[2],[1.0])|
| (3,[0],[1.0])|
| (3,[2],[1.0])|
| (3,[2],[1.0])|
| (3,[2],[1.0])|
| (3,[2],[1.0])|
| (3,[2],[1.0])|
| (3,[2],[1.0])|
| (3,[2],[1.0])|
| (3,[0],[1.0])|
+------------------------------------+
only showing top 10 rows
Sto cercando di accedere a questi elementi per riconvertirlo in pratica (normalmente) manichini codificati a caldo per poter convertire l'intero fotogramma senza problemi in Panda. All'interno di Spark ho provato a utilizzare .GetItem e .element ma questo genera anche un messaggio di errore "Impossibile estrarre il valore: è necessario il tipo di struttura". Qualche idea su come ottenere i valori da quello? Grazie!
Risposte
1 Majte Sep 11 2020 at 17:56
Potresti usare un UDF. Questo dovrebbe farlo:
import pyspark.sql.functions as F
from pyspark.sql.types import DoubleType
from pyspark.sql.types import ArrayType
vector_udf = F.udf(lambda vector: vector.toArray().tolist(),ArrayType(DoubleType()))
df = df.withColumn("check_indexed_encoded_0", vector_udf(train["check_indexed_encoded"]).getItem(0))
Per accedere al secondo elemento usa getItem (1) ecc.