首页 > 解决方案 > PySpark:在汇总负数分布时,describe() 函数出错——最小值和最大值翻转

问题描述

我正在尝试通过使用 PySpark describe() 函数汇总我的数据集中的测量分布来执行一些探索性数据分析。但是,对于具有负分布的测量值,最小值和最大值似乎颠倒了。

chicago_crime.describe('latitude', 'longitude').show()

+-------+-------------------+--------------------+
|summary|           latitude|           longitude|
+-------+-------------------+--------------------+
|  count|            6811141|             6811141|
|   mean|  41.84203025139101|  -87.67177837500668|
| stddev|0.08994460772003067|0.062086304377221284|
|    min|       36.619446395|       -87.524529378|
|    max|       42.022910333|       -91.686565684|
+-------+-------------------+--------------------+

测量longitude具有负分布。我预计最小值为longitude-91.686565684,最大值为-87.524529378。

有没有其他人注意到这个错误?PySpark 开发人员可以纠正这个错误吗?

根据下面的请求,这是printSchema()输出。

chicago_crime.printSchema()

root
 |-- latitude: string (nullable = true)
 |-- longitude: string (nullable = true)

然后转换为浮点数会显示预期的结果。

chicago_crime = chicago_crime.withColumn('latitude', chicago_crime.latitude.astype('float'))
chicago_crime = chicago_crime.withColumn('longitude', chicago_crime.longitude.astype('float'))

chicago_crime.describe('latitude', 'longitude').show()

+-------+-------------------+--------------------+
|summary|           latitude|           longitude|
+-------+-------------------+--------------------+
|  count|            6810978|             6810978|
|   mean|  41.84215369600549|   -87.6716834892099|
| stddev|0.08628712634075986|0.058938763393995654|
|    min|          41.644585|          -87.934326|
|    max|           42.02291|           -87.52453|
+-------+-------------------+--------------------+

标签: python-3.xpyspark

解决方案


我尝试了以下代码:

from pyspark.sql import Row
df = spark.sparkContext.parallelize([Row(-1),Row(-2), Row(-3)]).toDF()
df.describe().show()

我得到了预期的结果如下:

+-------+----+
|summary|  _1|
+-------+----+
|  count|   3|
|   mean|-2.0|
| stddev| 1.0|
|    min|  -3|
|    max|  -1|
+-------+----+

推荐阅读