首页 > 解决方案 > 在 pyspark 数据帧的 dtypes 中计数不同

问题描述

我需要一个函数来在 pypspark 数据框中得到这样的东西:

变量类型:

数字:4 分类:4 日期:1

标签: pysparkpyspark-dataframes

解决方案


让我们在 Pyspark Shell 中创建一个虚拟数据框

>>> rdd = sc.parallelize([['x',1,'y',2,1.1]])

>>> df = spark.createDataFrame(rdd, schema=['Col1','Col2','Col3','Col4','Col5'])

这是 df 的列类型

>>> df DataFrame[Col1: string, Col2: bigint, Col3: string, Col4: bigint, Col5: double]

根据文档,如果您在 Spark DataFrame 上使用 dtypes 属性,https: //spark.apache.org/docs/2.3.0/api/python/pyspark.sql.html#pyspark.sql.DataFrame.dtypes你将获得“所有列名及其数据类型作为列表”

>>> print(df.dtypes) [('Col1', 'string'), ('Col2', 'bigint'), ('Col3', 'string'), ('Col4', 'bigint'), ('Col5', 'double')]

您现在可以利用本机 Python 计数器库来获得所需的输出

>>> from Collections import Counter

>>> data_types = df.dtypes

>>> dict(Counter(dict(data_types).values())) {'string': 2, 'bigint': 2, 'double': 1}

您应该能够轻松地将这两行转换为满足您最终要求的函数

希望这可以帮助!


推荐阅读