【发布时间】:2019-05-30 14:41:17
【问题描述】:
我正在使用 pyspark 2.3,我正在尝试找出从数据框中获取一些汇总统计信息的最有效方法。
我有一个包含 15 亿条记录的数据框,分布在一个由 10 个节点组成的相对较小的集群中。每个都有 16gb 的 ram 和 4 个内核。我的复制因子设置为 2。
我的数据框可能有 15 列,它们是数据类型的混合,但我只对两列感兴趣 - ID 和 eventDate。我想运行的代码很简单:
output = df.groupby(['ID']).agg(F.min('eventDate').alias("firstDate"),F.max('eventDate').alias("lastDate"))
output.write.parquet('hdfs:///somewhere/dateFile.parquet',mode='overwrite')
我想弄清楚的是执行此操作的最有效方法。 ID,即我分组依据的字段,有 12m 个值,df.rdd.getNumPartitions() 目前是 642。
我最好先将我的数据框投影到我想要的两列吗?有这么多 ID,我应该先重新分区我的数据集吗?我应该删除重复项吗?我可以在我的 groupby 之前运行这样的东西:
df = df[['ID','eventDate']].drop_duplicates().repartition(x)
或
df = df[['ID','eventDate']].repartition(x)
我正在努力弄清楚什么会优化运行时。任何有关预先确定运行时的指导将不胜感激。如果可能的话,我不希望只是“测试一下”,因为我有几个这样的查询要运行,每个都需要一段时间。
【问题讨论】:
-
试穿小一号或解释一下。
-
DF 是柱状的。
-
15 亿很小
-
200 应该是 AGGR 的默认并行度。
标签: python apache-spark pyspark