【问题标题】:Describe a Dataframe on PySpark在 PySpark 上描述数据框
【发布时间】:2019-05-01 14:48:44
【问题描述】:

我正在加载一个相当大的 Parquet 文件

file = spark.read.parquet('hdfs/directory/test.parquet')

现在我想获取一些统计信息(类似于 pandas describe() 函数)。我试图做的是:

file_pd = file.toPandas()
file_pd.describe()

但显然这需要将所有数据加载到内存中,它会失败。 任何人都可以提出解决方法吗?

【问题讨论】:

    标签: python pandas apache-spark pyspark


    【解决方案1】:

    您需要哪些统计数据? Spark 也有类似的功能

    file.summary().show()
    
    +-------+----+
    |summary|test|
    +-------+----+
    |  count|   3|
    |   mean| 2.0|
    | stddev| 1.0|
    |    min|   1|
    |    25%|   1|
    |    50%|   2|
    |    75%|   3|
    |    max|   3|
    +-------+----+
    

    【讨论】:

    • df有多个列类型:string和float的时候怎么实现,好像我应用它,输出不整齐,不利于可视化。提前致谢
    • 我遇到了类似的问题,这是一个很好的答案,它帮助我避免了内存问题。虽然它给 NULL 作为最大值,如果任何列值包含 NULL,则为最小值。虽然 describe 不考虑 NULL。有人能给我一些关于如何处理 NULL 并在调用 summary() 时忽略它们的见解吗?
    【解决方案2】:

    在 Spark 中,您可以使用 df.describe()df.summary() 来查看统计信息。

    不同之处在于df.summary()返回与df.describe()相同的信息加上四分位信息(25%、50%和75%)。

    如果要删除字符串列,可以使用列表推导访问dtypes 的值,它返回一个元组 ('column_name', 'column_type'),然后删除字符串类型,将这些列传递为df.select() 的参数。

    命令示例:

    df.select([col[0] for col in df.dtypes if col[1] != 'string']).describe().show()
    

    【讨论】:

      【解决方案3】:

      尽管它与所问的问题不完全相关,但类似于hiveSQL 基于describe 函数查看data types,你可以简单地做

      df.printSchema()
      

      这将为您提供data types 的描述data frame

      【讨论】:

        猜你喜欢
        • 2023-03-31
        • 1970-01-01
        • 2018-06-23
        • 1970-01-01
        • 2012-10-16
        • 1970-01-01
        • 1970-01-01
        • 2017-07-31
        • 1970-01-01
        相关资源
        最近更新 更多