Dataframe 如何在PySpark中找到数据帧的大小或形状?

Dataframe 如何在PySpark中找到数据帧的大小或形状?,dataframe,pyspark,size,shapes,Dataframe,Pyspark,Size,Shapes,我试图找出PySpark中数据帧的大小/形状。我没有看到一个函数可以做到这一点 用Python我可以 data.shape() PySpark中是否有类似的功能。这是我当前的解决方案,但我正在寻找一个元素 row_number = data.count() column_number = len(data.dtypes) 列数的计算不理想…我认为Spark中没有类似的函数,如data.shape。但是我将使用len(data.columns)而不是len(data.dtypes)您可以通过以

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

用Python我可以

data.shape()
PySpark中是否有类似的功能。这是我当前的解决方案,但我正在寻找一个元素

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

列数的计算不理想…

我认为Spark中没有类似的函数,如
data.shape
。但是我将使用
len(data.columns)
而不是
len(data.dtypes)
您可以通过以下方式获得其
形状:

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

使用
df.count()
获取行数

将此添加到您的代码中:

导入pyspark
def火花_形(自):
返回(self.count(),len(self.columns))
pyspark.sql.dataframe.dataframe.shape=spark\u shape
那你就可以了

>>> df.shape()
(10000, 10)
但要提醒您的是,
.count()
对于尚未持久化的非常大的表可能非常慢

print((df.count(), len(df.columns)))
对于较小的数据集更容易

但是,如果数据集很大,另一种方法是使用pandas和arrows将数据帧转换为pandas df并调用shape

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

把它放在函数中?你是说NumPy和Pandas的
data.shape
<代码>形状
不是功能。什么不理想?我不确定除了您已经拥有的功能之外,您还想完成什么(除了用data.columns替换data.dtypes,但这没有什么区别)。这只提供了列数。行数呢?topanda不是一个动作吗?意思是:这不是要收集数据给你的主人,然后调用它的形状?如果是这样的话,那么这样做是不明智的,除非你确定它会适合主人的记忆。如果数据集很大,收集熊猫正是你不想做的。顺便问一下:为什么要为此启用交叉连接?箭头配置是否有助于收集熊猫?