[英]show() subset of big dataframe pyspark
我有一个大的 pyspark dataframe ,我正在对其他数据帧执行一些转换并与其他数据帧连接。 我想调查转换和连接是否成功,以及数据帧是否看起来像预期的那样,但我怎样才能显示 dataframe 的一小部分。
我尝试了很多东西,例如
df.show(5)
和
df.limit(5).show()
但我尝试的一切都需要大量工作,导致性能下降。 我可以启动一个非常大的集群,但是有没有办法快速获得 dataframe 的一小部分?
尝试与 dataframe 等效的 rdd
rdd_df = df.rdd
rdd_df.take(5)
或者,尝试打印 dataframe 架构
df.printSchema()
首先,要显示一定数量的行,您可以在调用select()
方法后使用limit()
) 方法,如下所示:
df.select('*').limit(5).show()
此外, df.show()
操作只会打印前 20 行,不会打印整个 dataframe。
第二,更重要的是,
spark dataframe 不包含数据,它包含指令和操作图,由于 spark 使用大数据,因此不允许执行任何操作,以防止性能下降,而是将方法分为两种Actions
和Transformations
,转换被收集并包含为操作图。
Action 是一种导致 dataframe 执行图中所有累积操作的方法,导致性能缓慢,因为它执行所有操作(注意,UDF 非常慢)。
show()
是一个动作,当您调用show()
时,它必须计算所有其他转换以向您显示真实数据。
记在脑子里。
要更快地迭代,您必须了解操作和转换之间的区别。
转换由任何导致另一个 RDD/Spark Dataframe 的操作定义,例如df.filter.join.groupBy
。 动作由任何导致非 RDD 的操作定义,例如df.write. or df.count() or df.show()
df.write. or df.count() or df.show()
。
转换是懒惰的,说不像 python df1=df.filter, df2=df1.groupby
df 和 df1 和 df3 在 memory 中。 相反,数据将流入 memory 直到您调用操作。 就像你的情况一样.show()
调用df.limit(5).show()
不会加快你的工作迭代,因为这个限制限制了最终的 dataframe 打印出来,而不是流过你的 memory 的原始数据。
像其他人的建议一样,您应该能够限制输入数据大小,以便更快地测试您的转换是否有效。 并进一步改进您的迭代,您可以从成熟的转换中缓存 dataframe,而不是一遍又一遍地运行它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.