1

Ich bin ein Neuling in PySpark.Pyspark: Ersetzen von Wert in einer Spalte durch Durchsuchen eines Wörterbuchs

Ich habe eine Spark DataFramedf, die eine Spalte 'device_type' hat.

Ich möchte jeden Wert ersetzen, der in "Tablet" oder "Phone" zu "Phone" ist, und ersetzen "PC" zu "Desktop".

In Python ich folgendes tun können,

deviceDict = {'Tablet':'Mobile','Phone':'Mobile','PC':'Desktop'} 
df['device_type'] = df['device_type'].replace(deviceDict,inplace=False) 

Wie kann ich diese mit PySpark erreichen? Vielen Dank!

Antwort

0

können Sie verwenden entweder na.replace:

df = spark.createDataFrame([ 
    ('Tablet',), ('Phone',), ('PC',), ('Other',), (None,) 
], ["device_type"]) 

df.na.replace(deviceDict, 1).show() 
+-----------+ 
|device_type| 
+-----------+ 
|  Mobile| 
|  Mobile| 
| Desktop| 
|  Other| 
|  null| 
+-----------+ 

oder Karte wörtliche:

from itertools import chain 
from pyspark.sql.functions import create_map, lit 

mapping = create_map([lit(x) for x in chain(*deviceDict.items())]) 


df.select(mapping[df['device_type']].alias('device_type')) 
+-----------+ 
|device_type| 
+-----------+ 
|  Mobile| 
|  Mobile| 
| Desktop| 
|  null| 
|  null| 
+-----------+ 

Bitte beachten Sie, dass die letztere Lösung Werte nicht in der Abbildung auf NULL konvertieren . Ist dies nicht ein gewünschtes Verhalten ist, können Sie coalesce hinzufügen:

from pyspark.sql.functions import coalesce 


df.select(
    coalesce(mapping[df['device_type']], df['device_type']).alias('device_type') 
) 
+-----------+ 
|device_type| 
+-----------+ 
|  Mobile| 
|  Mobile| 
| Desktop| 
|  Other| 
|  null| 
+-----------+ 
Verwandte Themen