8
社区成员
发帖
与我相关
我的任务
分享
# 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 列名
- 要**删除的条件**
我可以直接帮你改成**完全匹配你业务的最终代码**。
8
社区成员
发帖
与我相关
我的任务
分享加载中
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创作助手写篇文章吧