我有 10K 列和 7000 万行的 DF。我想计算 10K 列的均值和 corr。我做了下面的代码,但由于代码大小 64K 问题( https://issues.apache.org/jira/browse/SPARK-16845 ),它不起作用
数据:
region dept week sal val1 val2 val3 ... val10000
US CS 1 1 2 1 1 ... 2
US CS 2 1.5 2 3 1 ... 2
US CS 3 1 2 2 2.1 2
US ELE 1 1.1 2 2 2.1 2
US ELE 2 2.1 2 2 2.1 2
US ELE 3 1 2 1 2 .... 2
UE CS 1 2 2 1 2 .... 2
代码:
aggList = [func.mean(col) for col in df.columns] #exclude keys
df2= df.groupBy('region', 'dept').agg(*aggList)
代码 2
aggList = [func.corr('sal', col).alias(col) for col in df.columns] #exclude keys
df2 = df.groupBy('region', 'dept', 'week').agg(*aggList)
这失败了。有没有其他方法可以克服这个错误?有没有人用 10K 列尝试过 DF?对性能改进有什么建议吗?
最佳答案
我们也遇到了 64KB 的问题,但是在 where 子句中,这是在另一个错误报告下提交的。我们用作解决方法的方法很简单,分几个步骤进行操作/转换。
在您的情况下,这意味着您不会一步完成所有聚合。而是在外部操作中循环相关列:
select
创建一个临时数据框,它只包含操作所需的列。 groupBy
和 agg
,除了不是聚合列表,而是仅用于(或两个,您可以组合 mean
和 corr
。withColumn
将临时数据帧中的聚合列附加到结果 df。 由于 Spark DAG 的惰性求值,这当然比一次操作要慢。但它应该在一次运行中评估整个分析。
关于python - 在 pyspark Dataframe 中查找 10,000 列的均值和 corr,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40044779/