从pyspark列获取值并将其与python字典进行比较

oaxa6hgo  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(395)

所以我有一个pysparkDataframe,我想添加另一个列来使用section_1列中的值,并在python字典中找到相应的值。因此,基本上使用第1节单元格中的值作为键,然后在新列中填写python字典中的值,如下所示。
原始Dataframe
dataidobjidnameobjectsection\我的datadata NameObjectNamerd.111rd.123
python词典

object_map= {'rd.123' : 'rd.567'}

其中第1节的值为rd.123,我将在字典中搜索关键字“rd.123”,并希望返回rd.567的值并将其放入新列中
所需Dataframe
dataidobjidnameobjectsection \u 1 Section \u 2我的datadata NameObjectNamerd.111rd.123rd.567
现在我得到了这个错误与我目前的代码,我真的不知道我做错了什么,因为我不熟悉pyspark
代码中对列对象的调用不正确。请检查您的代码。
这是我目前正在使用的代码,其中object\u map是python字典。

test_df = output.withColumn('Section_2', object_map.get(output.Section_1.collect()))
zvokhttg

zvokhttg1#

您可以尝试以下方法(根据此答案改编,添加了空处理):

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

object_map = {'rd.123': 'rd.567'}
mapping_expr = create_map([lit(x) for x in chain(*object_map.items())])

df1 = df.filter(df['Section_1'].isNull()).withColumn('Section_2', F.lit(None))

df2 = df.filter(df['Section_1'].isNotNull()).withColumn(
    'Section_2', 
    when(
        df['Section_1'].isNotNull(), 
        mapping_expr[df['Section_1']]
    )
)

result = df1.unionAll(df2)

相关问题