pyspark - 在 pyspark 数据帧的 dtypes 中计数不同
问题描述
我需要一个函数来在 pypspark 数据框中得到这样的东西:
变量类型:
数字:4 分类:4 日期:1
解决方案
让我们在 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}
您应该能够轻松地将这两行转换为满足您最终要求的函数
希望这可以帮助!
推荐阅读
- ios - Firebase 会自动加密密码吗?
- python - 为什么我的 Keras 模型在我加载后会进行训练,即使我实际上并没有提供任何新的训练数据?
- c# - 我如何升级此算法以查找第 n 个最小元素
- twitter - 实体对象中带有符号字段的推文示例
- windows - 在 macbook 上安装 Windows
- laravel - 在 2 个模型之间进行规划
- c++ - 用于 threadx RTOS 的 C++ 包装器?
- android - Android Studio 在 XML 设计模式下移动视图
- node.js - 如何在nodejs中拆分名字和姓氏?
- python - LSTM中的hidden_dim和embed_size是什么意思?