【问题标题】:show() subset of big dataframe pyspark大数据框 pyspark 的 show() 子集
【发布时间】:2020-03-16 04:47:26
【问题描述】:

我有一个大的 pyspark 数据框,我正在对它执行一些转换并与其他数据框连接。我想调查转换和连接是否成功,以及数据帧是否符合预期,但我怎样才能显示数据帧的一小部分。

我尝试了很多东西,例如

df.show(5)

df.limit(5).show()

但我尝试的所有操作都需要大量作业,从而导致性能下降。 我可以启动一个非常大的集群,但是有没有办法快速获取数据帧的一小部分?

【问题讨论】:

  • 考虑限制数量。对于进入数据框的行(来自源)
  • Spark 是惰性的,它会等待诸如 show() 之类的操作来调用 DAG 操作。另一个解决方案是管理您的分区,而不是更大的集群。你怎么处理?默认数字?

标签: python dataframe pyspark databricks azure-databricks


【解决方案1】:

尝试数据帧的 rdd 等效项

 rdd_df = df.rdd
 rdd_df.take(5)

或者,尝试打印数据框架构

 df.printSchema()

【讨论】:

    【解决方案2】:

    首先,要显示一定数量的行,您可以在调用select() 方法后使用limit() 方法,如下所示:

    df.select('*').limit(5).show()
    

    另外,df.show() 操作只会打印前 20 行,不会打印整个数据帧。

    其次,更重要的是,

    火花动作:

    spark dataframe 不包含数据,它包含指令和操作图,由于 spark 使用大数据它不允许执行任何操作作为它的调用,以防止性能下降,而是将方法分为两种 @987654325 @ 和 Transformations,转换被收集并包含为操作图。

    Action 是一种导致数据帧执行图表中所有累积操作的方法,导致性能缓慢,因为它执行所有操作(注意,UDF 非常慢)。

    show() 是一个动作,当您调用show() 时,它必须计算所有其他转换以显示真实数据。

    记住这一点。

    【讨论】:

      【解决方案3】:

      要加快迭代速度,您必须了解操作和转换之间的区别。

      转换由任何导致另一个 RDD/Spark 数据帧的操作定义,例如df.filter.join.groupBy。操作由任何导致非 RDD 的操作定义,例如 df.write. or df.count() or df.show()

      转换是懒惰的,说not like python df1=df.filter, df2=df1.groupby df and df1 and df3 was in memory。相反,数据将流入内存,直到您调用操作。就像你的情况.show()

      调用df.limit(5).show() 不会加快您的作业迭代,因为此限制限制了最终数据帧被打印出来,而不是流经您的内存的原始数据。

      像其他人的建议一样,您应该能够限制输入数据大小,以便更快地测试您的转换是否有效。进一步改进您的迭代,您可以缓存来自成熟转换的数据帧,而不是一遍又一遍地运行它们。

      【讨论】:

        猜你喜欢
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 2020-12-16
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2018-10-29
        • 2015-01-13
        相关资源
        最近更新 更多