1

私はPySparkの初心者です。Pyspark:辞書を検索して列の値を置換する

私はSpark DataFramedfに 'device_type'という列を持っています。

"Tablet"または "Phone"にあるすべての値を "Phone"に置き換え、 "PC"を "Desktop"に置き換えます。

私は次の操作を行うことができますPythonで

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

どのように私はこの使用してPySparkを達成することができますか?ありがとう!

答えて

0

あなたは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| 
+-----------+ 

またはリテラルマップ:

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| 
+-----------+ 

後者の溶液はNULLへのマッピングの値ではない存在に変換されますのでご注意ください。これは望ましい動作ではない場合、あなたは​​3210を追加することができます。

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| 
+-----------+ 
関連する問題