从transforms.api导入变换,输入,输出
将pyspark.sql.functions导入为f
@transform(
output1=Output("/Buyers/clean/median_750_buyers"),
output2=Output("/Buyers/clean/cleaned/split_purchase_log_data", sever_permissions=True),
my_input=Input("/Buyers/raw_data/purchase_log"),
def get_median_750_buyers(ctx,my_input,output1,output2):
my_input = my_input.dataframe()
#按购买者名称,大陆和服装项目分组,并从30种可能的组合中抽取25个中位购买者
df = my_input.groupby('buyer_name', 'continent','clothing_items') \
.count() \
.select("buyer_name", f.col('count').alias('buyer_name_count')) \
.sort(f.desc("buyer_name_count"))
# get the total row in the new dataframe
rowCount = df.count()
我有一个Spark数据框,该记录是1,000,000行的购买记录,有50,000个来自6大洲的5种不同类型服装的唯一购买者
6个洲:(北美洲,欧洲,亚洲,非洲,南美洲,澳大利亚)
5件衣服:(帽子,裤子,T恤,大衣,袜子)
我想从6个大洲和5种服装的每种组合=(30种组合)中获得一个25个买方名称的数据框,这些数据组在按Buyer_name列分组时最接近中位数。这样一来,总共有750个购买者,他们的购买数据的所有行都被提取并保存到一个名为“ 750_median_buyers”的数据框中。
要求是使用pyspark代码完成此操作。 谢谢任何帮助,万分感谢!