Как агрегировать по дням с несколькими столбцами [Pyspark]? - PullRequest
0 голосов
/ 31 августа 2018

Я хочу преобразовать приведенный ниже код панды в pysaprk.

d = {'has_discount':'count',
    'clearance':'count',
    'count': ['count', 'sum'],
    'price_guide':'max'}

df.index = timestamp2datetime(df.time_create, unit='ms')
df1 = df.resample('D').agg(d)

df1.columns = df1.columns.map('_'.join)
d1 = {'has_discount_count':'discount_order_count',
    'clearance_count':'clearance_order_count',
    'count_count':'order_count',
    'count_sum':'sale_count',
    'price_guide_max':'price_guide'}

df2 = df1.rename(columns=d1)

Однако в pysaprk нет повторного отображения, попробуйте вместо этого использовать groupby:

d = {'has_discount':'count',
    'clearance':'count',
    'count': ['count', 'sum'],
    'price_guide':'max'}

df.select(date_format(from_unixtime(df.time_create/1000),'yyyy-MM-dd').alias('day')).groupby('day').agg(d).show(5)

Но получил ошибку

AnalysisException: u'Cannot resolve column name "price_guide" among (day);'

Агрегация Pyspark, похоже, не поддерживает ввод, такой как d. Что мне делать?

1 Ответ

0 голосов
/ 31 августа 2018

df.select, который вы используете, оставляет только один столбец day, но в заявлении агрегации вы используете другие столбцы. Что вы, вероятно, хотите, это добавить столбец day к другим, которые существуют:

df.withColumn('day', date_format(from...

...