Я не поместил сюда вывод объяснения, так как это сделает вопрос длинным. Но в обоих методах есть только одна перетасовка. Итак, как решить, какой из них займет больше времени?
Я использую среду выполнения блоков данных 14.3LTS
У меня есть следующее требование [list] [*]Свернуть фрейм данных для суммирования столбца суммы на основе типа документа [*]Присоединить сводный фрейм данных обратно к исходному фрейму данных, чтобы получить дополнительные столбцы [*]Отфильтровать объединенный фрейм данных с помощью оконной функции [/list] Пример кода Настройка фрейма данных [code]from datetime import date from pyspark.sql.types import StructType, StructField, StringType, IntegerType, DateType import pyspark.sql.functions as F from pyspark.sql.window import Window
df = spark.createDataFrame(data, schema) [/code] Сначала используем способ поворота [code]# Partitioning upfront so as to not shuffle twice(one in groupby and other in window) partition_df = df.repartition('company_code', 'line_no').cache()
# It will broadcast join because pivot_df is small (it is small for my actual case as well) join_df = ( partition_df.join(pivot_df, ['company_code', 'line_no']) .select(partition_df['*'], 'RE', 'WE', 'WL') )
final_df.show() +------------+-------+-------------+------+------------+---+---+---+ |company_code|line_no|document_type|amount|posting_date| RE| WE| WL| +------------+-------+-------------+------+------------+---+---+---+ | AB| 10| RE| 12| 2019-01-01| 25| 0| 0| | AB| 20| WE| 14| 2019-01-11| 0| 14| 0| | BC| 10| WL| 11| 2019-02-12| 0| 0| 11| | BC| 20| RE| 15| 2019-01-21| 15| 0| 0| +------------+-------+-------------+------+------------+---+---+---+ [/code] Я не поместил сюда вывод объяснения, так как это сделает вопрос длинным. Но в обоих методах есть только одна перетасовка. Итак, как решить, какой из них займет больше времени? Я использую среду выполнения блоков данных 14.3LTS