Есть ли способ сделать истинное слияние типа SQL из 2-х фреймов данных - PullRequest
0 голосов
/ 16 января 2019

Для начала, я признаю, что я довольно плохо знаком с фреймами данных / блоками данных, работая с ними всего несколько месяцев.

У меня есть два кадра данных, прочитанных из файлов паркета (полный формат) При просмотре документации выясняется, что то, что в пандах называется слиянием, на самом деле является всего лишь соединением.

в SQL я бы написал этот шаг как:

 ml_RETURNS_U = sqlContext.sql("""
  MERGE INTO U2 as target
    USING U as source
    ON (
        target.ITEMNUMBER = source.ITEMNUMBER
        and target.PRODUCTCOLORID = source.PRODUCTCOLORID
        and target.WEEK_ID = source.WEEK_ID
        )
    WHEN MATCHED THEN
      UPDATE SET target.RETURNSALESQUANTITY = target.RETURNSALESQUANTITY + source.QTY_DELIVERED
    WHEN NOT MATCHED THEN
      INSERT (ITEMNUMBER, PRODUCTCOLORID, WEEK_ID, RETURNSALESQUANTITY)
      VALUES (source.ITEMNUMBER, source.PRODUCTCOLORID, source.WEEK_ID, source.QTY_DELIVERED)
""")

Когда я запускаю эту команду, я получаю следующую ошибку: пункт назначения u'MERGE поддерживает только источники Delta. \ N; '

Итак, у меня есть два вопроса: есть ли способ, как я могу выполнить эту операцию, используя pandas или pySpark?

если нет, как я могу устранить эту ошибку?

1 Ответ

0 голосов
/ 17 января 2019

Вы можете создавать свои таблицы с помощью DELTA и выполнять эту операцию

см .: https://docs.databricks.com/delta/index.html

Так что вы можете сделать upsert, используя слияние, как это: https://docs.databricks.com/delta/delta-batch.html#write-to-a-table

...