如何在 PySpark 中找到 DataFrame 的大小或形状?

我试图在 PySpark 中找出 DataFrame 的大小/形状。我没有看到任何一个函数可以做到这一点。

在 Python 中,我可以这样做:

data.shape()

PySpark 中是否有类似的函数? 这是我目前的解决方案,但我正在寻找一个元素

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

列数的计算结果不理想。

294318 次浏览

我认为在 Spark 中没有类似于 data.shape的功能,但是我将使用 len(data.columns)而不是 len(data.dtypes)

你可以通过以下方式获得它的 shape:

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

使用 df.count()获取行数。

将以下代码添加到代码中:

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

然后你就可以

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

但是请注意,对于没有持久化的非常大的表,.count()可能会非常慢。

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)