根据其他列值(PySpark)从DataFrame获取值

时间:2016-07-27 02:59:01

标签: python apache-spark dataframe pyspark apache-spark-sql

我有一个Spark数据框,我想获取统计数据

stats_df = df.describe(['mycol'])
stats_df.show()
+-------+------------------+
|summary|             mycol|
+-------+------------------+
|  count|               300|
|   mean|              2243|
| stddev|  319.419860456123|
|    min|              1400|
|    max|              3100|
+-------+------------------+

如何使用min max mycol列值在summary中提取minmax的值?我如何通过数字索引来做到这一点?

2 个答案:

答案 0 :(得分:2)

好的,请考虑以下示例:

from pyspark.sql.functions import rand, randn
df = sqlContext.range(1, 1000).toDF('mycol')
df.describe().show()
# +-------+-----------------+
# |summary|            mycol|
# +-------+-----------------+
# |  count|              999|
# |   mean|            500.0|
# | stddev|288.5307609250702|
# |    min|                1|
# |    max|              999|
# +-------+-----------------+

如果你想访问有关stddev的行,每个例子,你只需要将它转换成RDD,收集它并将其转换成字典如下:

stats = dict(df.describe().map(lambda r : (r.summary,r.mycol)).collect())
print(stats['stddev'])
# 288.5307609250702

答案 1 :(得分:1)

您可以轻松地从该数据帧上的选择中分配变量。

x = stats_df.select('mycol').where('summary' == 'min')