Давайте создадим фиктивный фрейм данных в нашей оболочке Pyspark
>>> 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]
Согласно документации, если вы используете атрибут dtypes в Spark DataFrame, 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}
Вы легко сможете преобразовать эти две строки в функцию, которая соответствует вашим конечным требованиям
Надеюсь, это поможет!