В таблице групповой сортировки присоединитесь к другой таблице, используя первую функцию

Сначала я использую функцию окна, сортирую таблицу t1 по charge_time и помещаю t1 соединение с t2 на user_id. Я хочу получить первую запись, если t1 имеет более одной записи. Я использую first func для реализации этого

    _df = ss.sql("""
                    SELECT 
                        t1.user_id,
                        t1.pay_id,
                        t1.sku_mode,
                        t1.charge_time,
                        t1.exchange_type_t01,
                        ROW_NUMBER() OVER(PARTITION BY t1.user_id ORDER BY t1.charge_time)
                    FROM 
                        {} t1 
                    WHERE 
                        t1.refund_state = 0
                """.format(exchange_info_table))
    _df.createOrReplaceTempView('d_exchange_info')

    df = ss.sql("""
            SELECT 
                first(t1.sku_mode) AS sku_mode,
                first(t1.exchange_type_t01) AS exchange_type_t01,
                first(t1.user_id) AS user_id,
                first(t1.pay_id) AS pay_id,
                first(t1.charge_time) AS charge_time,
                first(t2.has_yxs_payment) AS has_yxs_payment,
                first(t2.has_sxy_payment) AS has_sxy_payment,
                first(t2.has_cxy_payment) AS has_cxy_payment,
                first(t2.has_sxy19_payment) AS has_sxy19_payment,
                first(t2.sxy19_join_time) AS sxy19_join_time,
                first(t2.yxs_join_time) AS yxs_join_time
            FROM
                d_exchange_info t1
            JOIN
                analytics_db.md_day_dump_users t2
            ON 
                t2.the_day = '{}'
                AND t1.user_id = t2.user_id
            GROUP BY
                t1.user_id
    """.format(st))

Я использую first func, но я получу нестабильную запись по сортировке с записью charge_time. Если записей больше одной, иногда я получаю одну, иногда другую

Почему это происходит и как это исправить? Это проблема sparksql или у моего sql есть проблема?

PS: я уже знаю, как исправить это другим способом, но я хочу знать, почему первая функция не эффективна.

Спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
137
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я мало что знаю об искре, но из документации:

The function is non-deterministic because its results depends on order of rows 
which may be non-deterministic after a shuffle.

Ваша оконная функция, похоже, создает row_number, но вы нигде ее не используете.

Вам либо нужно отсортировать набор результатов, либо, если вы намерены использовать сгенерированный вами номер строки, добавьте where row_number=1. Вы также должны назвать свой столбец row_number, если это не сделано явно искрой.

да. Точно я использую этот способ, чтобы исправить это. Где этот документ вы нашли? Я только что нашел документ func, подобный этому """Агрегатная функция: возвращает первое значение в группе. Функция по умолчанию возвращает первые значения, которые она видит. Она вернет первое ненулевое значение, которое она видит, когда для ignoreNulls установлено значение true. Если все значения равны нулю, то значение null возвращается """ из искрового документа.

piperck 30.05.2019 08:10

Doc был стандартными страницами документации Apache. Это ссылка: spark.apache.org/docs/latest/api/java/org/apache/spark/sql/…

TomC 31.05.2019 01:45

Другие вопросы по теме