Как получить общее значение путем сравнения двух фреймов данных pyspark - PullRequest
1 голос
/ 27 мая 2020

Я переношу фрейм данных pandas на pyspark. У меня есть два фрейма данных в pyspark с разными счетчиками. Приведенный ниже код я могу достичь в pandas, но не в pyspark. Как сравнить значения двух фреймов данных в pyspark и поместить значение как новый столбец в df2.

def impute_value (row,df_custom):
    for index,row_custom in df_custom.iterrows():
        if row_custom["Identifier"] == row["IDENTIFIER"]:
           row["NEW_VALUE"] = row_custom['CUSTOM_VALUE']
    return row["NEW_VALUE"]

df2['VALUE'] = df2.apply(lambda row: impute_value(row, df_custom),axis =1)

Как я могу преобразовать эту конкретную функцию в фрейм данных pyspark? В pyspark я не могу передать строковое значение функции (impute_value).

Я пробовал следующее.

df3= df2.join(df_custom, df2["IDENTIFIER"]=df_custom["Identifier"],"left")
df3.WithColumnRenamed("CUSTOM_VALUE","NEW_VALUE")

Это не дает мне результата.

1 Ответ

1 голос
/ 27 мая 2020

само левое соединение должно делать все необходимое

import pyspark.sql.functions as f
df3= df2.join(df_custom.withColumnRenamed('Identifier','Id'), df2["IDENTIFIER"]=df_custom["Id"],"left")

df3=df3.withColumn('NEW_VALUE',f.col('CUSTOM_VALUE')).drop('CUSTOM_VALUE','Id')

...