Вставьте значения в таблицу Hive в Pyspark of Row - PullRequest
0 голосов
/ 10 октября 2018

Я новичок в работе с Pyspark.У меня есть функция, которая вычисляет максимальное значение запроса и вставляет максимальное значение типа Row вместе с двумя другими значениями date и product name.

def findCount(query, prod_date, prod_name):
        count = query.agg({"count": "max"}).collect()[0] (returns Row(max(count)=Decimal('1.0000000000')))
        reopen = hc.sql('insert into details values(row_date, row_name, count)')
        print(=count)

Это код, который вызывает функцию:

for row in aggs_list:
        prod_date= row.date
        prod_name = row.product_name
        query = prod_load.filter((col("date") == prod_date) & (col("prod_name") == row_name))
        findCount(query, prod_date, prod_name)

Это то, что я пробовал и не работает.Есть ли более эффективный способ сделать это?

1 Ответ

0 голосов
/ 10 октября 2018

Вам, вероятно, следует держаться подальше от типов строк, это обычно означает, что вы собрали все данные для водителя.Если это так, то нет смысла использовать spark, потому что вы не используете преимущества параллельной вычислительной среды.

С помощью spark sql вы можете выполнить следующее:

max_data = spark.sql("SELECT product_name, max(count), product_date FROM table")

Что касается вставки в базу данных (я предполагаю, что вы используете Hive из hc, большинство людей запускают задание ежедневно и записывают результат в таблицу с разбивкой по датам, например:

Сначала зарегистрируйте временную таблицу кустов max_data.registerTempTable("md")

Затем перезапишите раздел spark.sql("INSERT OVERWRITE new_table PARTITION(dt=product_date) SELECT * FROM md")

...