Нужна помощь в соединении двух фреймов данных в столбце, который содержит агрегированное значение - PullRequest
0 голосов
/ 07 марта 2019

В pyspark мы пытаемся объединить два фрейма данных.мы соединяем фрейм данных с другим (который сам генерируется соединением)

result3 = result2.join(df3, df3.mktg_id == result2."max(acct_mkt_id)").select('result2.trans_dt', 'result2.channel','result2.loc_id','result2.meta_reason','max(acct_mkt_id)', 'max(campaign_name)').groupBy('result2.trans_dt', 'result2.channel','result2.loc_id','result2.meta_reason','max(acct_mkt_id)', 'max(campaign_name)').agg(sum("result2.bskt_sum"))

Сообщение об ошибке

SyntaxError: invalid syntax

Однако я получаю синтаксическую ошибку.теперь result2.schema имеет поле max (acct_mkt_id), но если я попытаюсь без кавычек

result3 = result2.join(df3, df3.mktg_id == result2.max(acct_mkt_id)).select('result2.trans_dt', 'result2.channel','result2.loc_id','result2.meta_reason','max(acct_mkt_id)', 'max(campaign_name)').groupBy('result2.trans_dt', 'result2.channel','result2.loc_id','result2.meta_reason','max(acct_mkt_id)', 'max(campaign_name)').agg(sum("result2.bskt_sum"))

Сообщение об ошибке -

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/hdp/2.5.3.0-37/spark/python/pyspark/sql/dataframe.py", line 842, in __getattr__
    "'%s' object has no attribute '%s'" % (self.__class__.__name__, name))
AttributeError: 'DataFrame' object has no attribute 'max'

Подскажите, пожалуйста, что мне не хватает иликак мне обойти эту ошибку.

1 Ответ

0 голосов
/ 07 марта 2019

Используйте col для ссылки на столбец в таких случаях:

import org.apache.spark.sql.functions.col

result2.col("max(acct_mkt_id)")

В PySpark вы можете просто ссылаться на столбец с помощью:

result2["max(acct_mkt_id)"]
...