如何在pyspark中自动删除常量列?

2023-12-27

我在 pyspark 中有一个 Spark 数据框,我需要从数据框中删除所有常量列。由于我不知道哪些列是常量,因此我无法手动取消选择常量列,即我需要一个自动过程。我很惊讶我无法在 stackoverflow 上找到简单的解决方案。

Example:

import pandas as pd
import pyspark
from pyspark.sql.session import SparkSession
spark = SparkSession.builder.appName("test").getOrCreate()

d = {'col1': [1, 2, 3, 4, 5], 
     'col2': [1, 2, 3, 4, 5],
     'col3': [0, 0, 0, 0, 0],
     'col4': [0, 0, 0, 0, 0]}
df_panda = pd.DataFrame(data=d)
df_spark = spark.createDataFrame(df_panda)
df_spark.show()

Output:

+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
|   1|   1|   0|   0|
|   2|   2|   0|   0|
|   3|   3|   0|   0|
|   4|   4|   0|   0|
|   5|   5|   0|   0|
+----+----+----+----+

期望的输出:

+----+----+
|col1|col2|
+----+----+
|   1|   1|
|   2|   2|
|   3|   3|
|   4|   4|
|   5|   5|
+----+----+

在 pyspark 中自动删除常量列的最佳方法是什么?


首先计算每列中的不同值,然后删除仅包含一个不同值的列:

import pyspark.sql.functions as f
cnt = df_spark.agg(*(f.countDistinct(c).alias(c) for c in df_spark.columns)).first()
cnt
# Row(col1=5, col2=5, col3=1, col4=1)
df_spark.drop(*[c for c in cnt.asDict() if cnt[c] == 1]).show()
+----+----+
|col1|col2|
+----+----+
|   1|   1|
|   2|   2|
|   3|   3|
|   4|   4|
|   5|   5|
+----+----+
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在pyspark中自动删除常量列? 的相关文章

随机推荐

  • 如何使“Enter”键的行为类似于 JFrame 上的“提交”

    我正在构建一个客户端 服务器应用程序 我想让用户在身份验证框架上变得轻松 I want to know how to make enter key submits the login and password to the Database
  • 您需要使用不同的包名称,因为“com.example”受到限制

    我已经在这里找到了很多关于这个问题的线程 但没有一个对我有用 我使用的是Android Studio 2 1 2 并且我仍然有com example域名 在清单或任何其他文件中更改它会导致出现大量错误 而我的 build gradle 仅显
  • SwiftUI:两指滑动(滚动)手势

    我对 2 指滑动 滚动 手势感兴趣 不是两指拖动 而是两指滑动 无需按下 就像在 Safari 中用来向上和向下滚动一样 据我所知 没有一个基本手势可以用于此目的 TapGesture 不是 LongPressGesture 不 DragG
  • 防止多次登录

    我试图在我的应用程序中阻止同一用户的多次登录 我的想法是在用户登录时更新安全标记并将其添加为声明 然后在每个请求中将 cookie 中的标记与数据库中的标记进行比较 这就是我的实现方式 public virtual async Task
  • 滚动条没有出现?

    我正在为 Tumblr 开发主题 但由于某种原因滚动条没有出现 这是博客的网址 http infinitethemedewitt tumblr com 主题的代码可以通过右键单击在页面源代码中找到 除了 html 之外的所有代码 因为它被
  • fopen 不显示内容

    不知道为什么我的即时通讯页面出现空白 txt 中有数据 php 中没有错误 这是 txt Product txt ID OID Title Description Option Price 01 01JAP Japanese Mod
  • CarrierWave + RMagick 方形裁剪?

    我正在尝试使用 Ruby on Rails CarrierWave 和 RMagick 制作固定的方形图像裁剪 我尝试过以下两种方法 但没有运气 version thumb do process resize to fit gt 200 2
  • C# 十进制格式化查询

    我正在尝试格式化小数 以便它显示如下 14 5 应显示为 14 50 14 50 应显示为 14 50 14 05 应显示为 14 05 14 00 应显示为 14 是否可以使用单一字符串格式 即不使用条件格式 我尝试过 0 不满足第一个示
  • 水平滚动列表

    我希望将图像显示在水平列表中 这就是我到目前为止所做的 var list Ext create Ext List store store itemTpl new Ext XTemplate img src icon inline true
  • 设置解析注册的默认个人资料图片

    我试图在注册时在解析中设置默认的个人资料图片 该图片位于我的项目文件夹中 有什么办法可以设置不上传照片吗 var user new Parse User user set username username val user set pas
  • 在 HyperLedger Composer 查询中获取资产计数?

    我想在 HyperLedger Composer 中编写一个查询 返回我在超级账本中拥有的资产数量 我有数千条记录 我不想将它们全部获取并计算计数 数据传输会很慢 我希望查询返回计数 不幸的是 这儿没有count使用作曲家查询语言 您必须创
  • cocos2d 计算给定起点、角度和距离的目的地点

    我想快点吧 Cocos2d 和 xcode 中的 2d 问题 I have CGPoint currPoint float lineLength float angle 现在 我需要找到距离 currPoint 角度为 lineLength
  • 大量数据的数据库设计[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开展一个项目 涉及来自美味网站的大量数据 可用数据为 日期 用户 ID 网址 标签 针对每个书签 我将数据库规范化为 3NF 并且由于我们
  • 是否需要“设置字符集utf8”?

    我正在重写我们的数据库类 基于 PDO 并陷入困境 我被教导要同时使用SET NAMES utf8 and SET CHARACTER SET utf8在 PHP 和 MySQL 中使用 UTF 8 时 在 PDO 中我现在想使用PDO M
  • PHP 日期比较

    如何检查 2008 02 16 12 59 57 格式的日期是否小于 24 小时前 if strtotime 2008 02 16 12 59 57 gt time 24 60 60 LESS
  • 如何确定 _POSIX_PATH_MAX 的系统值

    谁能告诉我如何找到系统值 POSIX PATH MAX在 Linux 薄荷中 我知道它在 文件中可用 但我不知道如何找到它的值 根据 POSIX 要使用的工具被命名为getconf http pubs opengroup org onlin
  • React Router Lazy 组件不起作用

    所以这有效 import Page from components Page render return
  • 有选择地将 C++ 核心逻辑暴露给 QML 的最佳方法

    我想设置特定 QML 组件的上下文属性 而不是在根上下文中 我不希望在组件外部访问该属性 C 有没有一种方法可以访问组件的上下文 只允许从组件的上下文中访问命名属性 而不是从全局命名空间中访问 我想保持 QML 声明性 而不是在 C 中创建
  • Seaborn 群图和点图躲避对齐

    有没有办法将点图的平均值 SEM 与相应的群图对齐 这是我的代码 import seaborn as sns import numpy as np import pandas as pd import matplotlib pyplot a
  • 如何在pyspark中自动删除常量列?

    我在 pyspark 中有一个 Spark 数据框 我需要从数据框中删除所有常量列 由于我不知道哪些列是常量 因此我无法手动取消选择常量列 即我需要一个自动过程 我很惊讶我无法在 stackoverflow 上找到简单的解决方案 Examp