#python #pyspark
#python #pyspark
Вопрос:
Я не уверен, правильно ли я задаю этот вопрос или нет, но мне трудно понять, как распаковать значение ключа словаря, которое может иметь тип списка.
Чего я в основном пытаюсь достичь, так это иметь функцию, которая может группироваться по фрейму данных в PySpark, но условие агрегации может иметь в нем несколько значений.
def readfilegrouped(**groupargs):
"""Group the dataframe based on the conditions"""
dfgrouped = groupargs['groupingdf'].groupBy(groupargs['aggcol']).agg(groupargs['aggcond'])
return dfgrouped
В приведенной выше функции я хочу иметь возможность передавать несколько условий для агрегирования. Что-то вроде упомянутого ниже:
groupargs = {'groupingdf':members, 'aggcol':"MEMBERID", 'aggcond':F.countDistinct(F.col("MEMBERID")).alias("DISTINCT_MEMBERID"), F.sum(F.col("TRANSACTIONS")).alias("TOTALTRANSACTIONS")}
membersgrouped = readfilegrouped(**groupargs)
Таблица членов:
MEMBERID TRANSACTIONS DATE
M1 2 01/01
M1 3 01/02
M2 5 02/01
M3 1 01/01
M3 2 01/02
Результат, который я ищу:
MEMBERID DISTINCT_MEMBERID TOTALTRANSACTIONS
M1 1 5
Ближе всего я подошел к использованию a defaultdict
для этого, но я не уверен, как правильно определить его при вызове функции. Любая помощь будет оценена.
Комментарии:
1.
list
не может быть ключомdict
. Вы имеете в виду кортеж?2. Я хочу, чтобы это было значение ключа словаря, если вы посмотрите на то, чего я пытаюсь достичь выше, я пытаюсь выполнить несколько агрегаций с 1 ключом словаря, а затем распаковать этот словарь при вызове функции.
3. Можете ли вы показать нам пример того, что вы хотите?
4. Это именно то, что я показал выше. Я не уверен, что еще нужно. По сути, я хочу передать несколько условий при агрегировании.
5. предоставьте некоторые образцы данных (и желаемый результат). каковы значения
members
и т. Д. Кроме того, вы имели в видуmembersgrouped = readfilegrouped(**args)
вместо**groupargs
параметра?