Python 在pyspark数据框中查找10000列的平均值和corr

Python 在pyspark数据框中查找10000列的平均值和corr,python,apache-spark,pyspark,spark-dataframe,Python,Apache Spark,Pyspark,Spark Dataframe,我有10K列和7000万行的DF。我想计算10K列的平均值和corr。我做了以下代码,但由于代码大小64K问题,它无法工作() 数据: 代码: 代码2 aggList = [func.corr('sal', col).alias(col) for col in df.columns] #exclude keys df2 = df.groupBy('region', 'dept', 'week').agg(*aggList) 这是失败的。有没有其他方法可以克服这个错误?有人用10K列做过D

我有10K列和7000万行的DF。我想计算10K列的平均值和corr。我做了以下代码,但由于代码大小64K问题,它无法工作()

数据:

代码:

代码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子句中,它是在另一个bug报告中提交的。我们所使用的解决方法,简单地说,就是分几个步骤进行操作/转换

在您的情况下,这意味着您不能一步完成所有聚合。而是在外部操作中循环相关列:

  • 用于创建临时数据框,其中仅包含操作所需的列
  • 像您那样使用
    groupBy
    agg
    ,除了不用于聚合列表,而仅用于on(或两个,您可以将
    平均值
    corr
    组合在一起)
  • 收到对所有临时数据帧的引用后,使用将临时数据帧中的聚合列附加到结果df

由于Spark DAG的延迟计算,这当然比在一次操作中进行要慢。但它应该在一次运行中评估整个分析。

10k列的相关性?这是一个成对的度量,因此您希望得到~10^8个相关系数?@Martin Milichovsky抱歉,我错过了corr函数中的第二列。我正在尝试确定d列sal和val1,sal和value2…sal和value10000之间的误差。如果您有任何疑问,请告诉我questions@MartinMilichovsky我想Harish只是想把每一列和“sal”关联起来。所以没有组合爆炸。我有相同的计划。但这里的问题是我必须找到第1列和其余所有列之间的corr。这意味着我必须这样做corr 10000次。所以我觉得在10000个临时df中存储这些数据的开销太大了。还有一件事是我的val列是动态的。问题是,如果许多聚合的DAG和临时df看起来确实有很大的不同。如果你在底层RDD中思考,它不会有太大的区别,因为洗牌的数量等等相同。对于df.columns中的col:df2=df.groupBy('region','dept').agg(func.mean(func.col(col)).alias(col+''um'))df2=df2.withColumn(col,func.col(col)-func.col(col+''um'))。删除(col+''um')ref上面的代码。这是你想说的吗?这将循环10k次?你能纠正我吗?
aggList =  [func.mean(col) for col in df.columns]  #exclude keys
df2= df.groupBy('region', 'dept').agg(*aggList)
aggList =  [func.corr('sal', col).alias(col) for col in df.columns]  #exclude keys
df2  = df.groupBy('region', 'dept', 'week').agg(*aggList)