我在一个列数为> 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等并加入他们共同获取数据。
答案 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()
不确定回答你的问题。不要犹豫评论。