如何处理一个超过2000列的表来计算pyspark中所有数字列的平均值?

时间:2017-04-20 07:01:07

标签: python pyspark spark-dataframe

我在一个列数为> 2000的表上工作,我想执行表的所有数字列的统计信息,我创建了一个数据帧

df = sqlContext.sql(“select * from table”)

我尝试在数据框上使用 describe()作为df.describe(),但它就像进程正在运行终身...大约5-6小时但没有响应。

有没有人可以帮助我使用pyspark解决方法。提前谢谢。

P.S =>在scala中有一个名为sliding的函数可以用作 allColumns.sliding(200)将滑动200列,进一步我们可以执行该列的平均值。

我还需要收集所有部分,即P1 - > 1-200列,P2 - > 201-400等并加入他们共同获取数据。

1 个答案:

答案 0 :(得分:0)

您可以直接在sql请求中计算平均值,如:

# collect the column name and shape then in a list
colname = sqlContext.sql("describe table1").select("col_name").collect()
colname = [x.col_name for x in colname]
# build the query (average on each column)
df = sqlContext.sql("select " +",".join(["AVG({0}) AS avg_{0}".format(x) for x in colname]) + " from table")
# As a result you will get the average for each column (as Row)
df.collect()

不确定回答你的问题。不要犹豫评论。