PySpark 2.0 DataFrame的大小或形状


81

我试图找出PySpark中DataFrame的大小/形状。我看不到可以执行此操作的单个功能。

在Python中我可以做

data.shape()

PySpark是否有类似的功能。这是我目前的解决方案,但我正在寻找一个要素

row_number = data.count()
column_number = len(data.dtypes)

列数的计算不是理想的...


把它放在一个函数中?
GwydionFR 16/09/23

您是指data.shapeNumPy和Pandas吗?shape不是功能。
flow2k '19

什么不理想?我不确定您要完成的工作还有什么(除了用data.columns替换data.dtypes,但没有什么区别)。
Melkor.cz

Answers:




23

将此添加到您的代码中:

import pyspark
def spark_shape(self):
    return (self.count(), len(self.columns))
pyspark.sql.dataframe.DataFrame.shape = spark_shape

那你可以做

>>> df.shape()
(10000, 10)

但是只是提醒您,.count()对于尚未持久保存的非常大的表可能会非常慢。


8
print((df.count(), len(df.columns)))

对于较小的数据集更容易。

但是,如果数据集很大,则另一种方法是使用熊猫和箭头将数据框转换为熊猫df并调用形状

spark.conf.set("spark.sql.execution.arrow.enabled", "true")
spark.conf.set("spark.sql.crossJoin.enabled", "true")
print(df.toPandas().shape)

8
.toPandas不是动作吗?意思是:这不是要收集数据到您的母版,然后在其上调用shape吗?如果是这样,那么这样做是不明智的,除非您确定它将适合主人的记忆。
ponadto'4

2
如果数据集很大,那么收集熊猫就是您不希望做的事情。顺便说一句:为什么要为此启用交叉联接?箭头配置是否有助于收集到熊猫?
Melkor.cz

2

我认为没有类似data.shapeSpark的功能。但是我会用len(data.columns)而不是len(data.dtypes)


6
这只是给您列数。那行数呢?
JanLauGe
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.