Использовать динамическое имя столбца в spark

#apache-spark #databricks

#apache-spark #databricks

Вопрос:

Я кодирую Python в Databricks и использую spark 2.4.5.

У меня есть функция, подобная приведенному ниже коду :

 def verifyMatchAndDisplayDifferences(oldDF, newDF, pkColumn):
   ...
   newDF.join(oldDF, newDF.SK_ID_Site == oldDF.SK_ID_Site, "full")
   ...
  

Как вы можете видеть, я объединяю два фрейма данных с помощью столбца (SK_ID_Site).
Я хотел бы знать, как я могу использовать свой параметр (pkColumn) вместо использования жестко закодированного имени столбца?

Я попробовал приведенный ниже код, но он не сработал

 newDF.join(oldDF, newDF.col(pkColumn) == oldDF.col(pkColumn), "full")
  

Ответ №1:

Поскольку это всегда один и тот же ключ, вы можете использовать on параметр

 def verifyMatchAndDisplayDifferences(oldDF, newDF, pkColumn):
   ...
   newDF.join(oldDF, on=[pkColumn], how="full")
   ...
  

Дополнительная документация здесь, https://spark.apache.org/docs/latest/api/python/_modules/pyspark/sql/dataframe.html#DataFrame.join

Комментарии:

1. Если у меня есть составные pkColumns, что мне нужно делать? а что, если мой pkColumn немного отличается. например, PK_Site и PK_Site_Old? у меня есть шаблон, и я могу создать имя столбца pk в своей функции. из-за этого я передал только один параметр.