# HDFS + Python 筛选删除 Excel(xlsx) 数据(完整可运行)

Borter
新星创作者: Java技术领域
优质创作者: 学术研究与理论基础技术领域
2026-04-13 14:58:07
# HDFS + Python 筛选删除 Excel(xlsx) 数据(完整可运行)
你要的是:**用 Python 读取 HDFS 上的 xlsx 文件 → 按条件筛选数据 → 删除不需要的行 → 写回 HDFS**

我直接给你**完整、可复制、开箱即用**的代码,包含依赖安装 + 操作步骤。

## 一、先安装依赖
```bash
pip install pandas openpyxl hdfs
```
- `pandas + openpyxl`:读写 Excel(xlsx)
- `hdfs`:Python 连接 HDFS

---

## 二、完整 Python 代码(核心)
功能:
1. 从 HDFS 下载 xlsx
2. **按条件筛选删除行**(你可自定义条件)
3. 上传新文件回 HDFS(覆盖原文件/保存新文件)
4. 自动清理本地临时文件

```python
from hdfs import InsecureClient
import pandas as pd
import os

# ===================== 1. 配置信息(改成你自己的)=====================
HDFS_HOST = '192.168.1.100'  # HDFS NameNode IP
HDFS_PORT = 50070            # HDFS Web UI 端口(默认 50070)
HDFS_FILE_PATH = '/user/data/test.xlsx'  # HDFS上的Excel路径
LOCAL_TEMP_PATH = 'temp.xlsx'             # 本地临时文件

# ===================== 2. 连接 HDFS =====================
client = InsecureClient(f'http://{HDFS_HOST}:{HDFS_PORT}', user='hadoop')

# ===================== 3. 从 HDFS 下载 Excel =====================
print("正在从 HDFS 下载文件...")
with client.read(HDFS_FILE_PATH) as reader:
    with open(LOCAL_TEMP_PATH, 'wb') as f:
        f.write(reader.read())

# ===================== 4. 读取 Excel 并 筛选删除数据(核心)=====================
df = pd.read_excel(LOCAL_TEMP_PATH, engine='openpyxl')

print(f"删除前总行数:{len(df)}")

# ========== 【筛选删除条件】自己改这里!==========
# 示例1:删除 状态=作废 的行(保留 非作废)
df = df[df['状态'] != '作废']

# 示例2:删除 金额<0 的行
# df = df[df['金额'] >= 0]

# 示例3:删除 姓名为空 的行
# df = df.dropna(subset=['姓名'])

# 示例4:多条件组合删除(保留 正常 且 金额>0 的数据)
# df = df[(df['状态'] == '正常') & (df['金额'] > 0)]
# =================================================

print(f"删除后总行数:{len(df)}")

# ===================== 5. 保存新 Excel =====================
df.to_excel(LOCAL_TEMP_PATH, index=False, engine='openpyxl')

# ===================== 6. 上传回 HDFS =====================
print("正在上传新文件到 HDFS...")
client.upload(HDFS_FILE_PATH, LOCAL_TEMP_PATH, overwrite=True)

# ===================== 7. 清理本地临时文件 =====================
os.remove(LOCAL_TEMP_PATH)
print("✅ 处理完成!已筛选删除并更新 HDFS 上的 xlsx 文件")
```

---

## 三、最常用的筛选删除示例(直接复制用)
```python
# 1. 删除某列等于指定值
df = df[df['列名'] != '删除标记']

# 2. 删除包含某个关键词的行
df = df[~df['备注'].str.contains('删除|作废|无效', na=False)]

# 3. 删除空行
df = df.dropna(how='all')

# 4. 删除ID重复的数据(只留第一条)
df = df.drop_duplicates(subset=['ID'], keep='first')

# 5. 按行号删除(比如删除前10行)
df = df.iloc[10:]
```

---

## 四、安全建议(必看)
1. **先备份原文件**
   ```python
   client.upload(HDFS_FILE_PATH + ".bak", LOCAL_TEMP_PATH, overwrite=True)
   ```
2. **先本地测试**:把 HDFS 下载注释掉,直接用本地 Excel 调试筛选条件
3. **覆盖前确认行数**:代码里已打印删除前后行数

---

### 总结
1. 用 `pandas` 轻松筛选删除 Excel 行
2. 用 `hdfs` 库直接读写 HDFS 上的 xlsx
3. 全程**无需手动下载/上传**,Python 一键完成

你只要告诉我:
- Excel 列名
- 要**删除的条件**

我可以直接帮你改成**完全匹配你业务的最终代码**。

 

...全文
64 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8

社区成员

发帖
与我相关
我的任务
社区描述
Begin here!
团队开发 技术论坛(原bbs) 广东省·东莞市
社区管理员
  • Bol5261
  • Caf5261
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Java是一种广泛使用的编程语言,它是由Sun Microsystems(现在是Oracle Corporation的一部分)开发的。Java是一种静态类型的、类基础的、并发性的、面向对象的编程语言。以下是一些Java公告:

1. Java 11已经发布:Java 11是Java的一个主要版本,于2018年9月25日发布。它包含了许多新的功能和改进,例如本地变量类型推断、改进的并发API、新的日期和时间API等。

2. Java 8是迄今为止最流行的Java版本之一:Java 8是Java的一个主要版本,于2014年3月18日发布。它引入了Lambda表达式和Stream API,使得Java在处理集合和函数式编程方面更加简单和高效。

3. Java Enterprise Edition 8已经发布:Java Enterprise Edition 8是Java企业版的一个主要版本,于2013年9月4日发布。它引入了Java Transaction API(JTA)和Java Persistence API(JPA)的更新,以及其他一些新的特性和改进。

4. Java MicroProfile已经发布:Java MicroProfile是一种基于Java Enterprise Edition的规范集合,旨在为构建微服务提供一组轻量级的、可扩展的Java API。它包括了一些用于开发微服务的API,例如JAX-RS 2.0、CDI、JSON-P等。

5. JavaFX已经集成到Java 8中:JavaFX是一种用于构建富客户端应用程序的Java库。从Java 8开始,JavaFX已经被集成到Java平台中,使得开发人员可以更容易地使用Java来创建图形用户界面。

以上是一些Java公告,包括新版本的发布、新特性的引入以及Java平台的更新等。

试试用AI创作助手写篇文章吧