pyspark 遍历表

from pyspark.sql import SparkSession

创建SparkSession

spark = SparkSession.builder.appName(“example”).getOrCreate()

读取表

example_table = spark.read.table(“example_table”)

使用collect()方法遍历表

data = example_table.collect()
for row in data:
print(row)

使用foreach()方法遍历表

def process_row(row):
# 处理每一行数据的逻辑
pass
example_table.foreach(process_row)

关闭SparkSession

spark.stop()

在 Oracle 数据库中,如果你希望**逐条遍历中的所有数据**(例如对每条记录进行处理、计算或输出),可以使用 **游标(CURSOR)** 来实现。这种方式非常适用于需要按顺序一条条处理数据的场景。 --- ### ✅ 示例:使用 PL/SQL 游标逐条遍历 `td_d_ddmx` 假设你有一个 `td_d_ddmx`,包含以下字段: - `ID`:主键 - `START_TIME`:订单编制起时间 - `END_TIME`:订单编制止时间 我们想遍历这张,依次读取每条记录,并打印两个时间之间的天数差。 ```sql SET SERVEROUTPUT ON; DECLARE -- 定义游标:按 ID 升序遍历 CURSOR cur IS SELECT id, start_time, end_time FROM td_d_ddmx ORDER BY id; -- 定义变量用于接收每条记录 rec cur%ROWTYPE; BEGIN OPEN cur; LOOP FETCH cur INTO rec; EXIT WHEN cur%NOTFOUND; -- 在这里处理每条记录 DBMS_OUTPUT.PUT_LINE('ID: ' || rec.id || ', 时间差(天): ' || (rec.end_time - rec.start_time)); END LOOP; CLOSE cur; END; / ``` --- ### 🔍 代码说明: | 部分 | 说明 | |------|------| | `CURSOR cur IS ...` | 定义一个游标,指定要查询的数据和排序方式 | | `OPEN cur;` | 打开游标 | | `FETCH cur INTO rec;` | 从游标中取出一条记录到变量 `rec` | | `EXIT WHEN cur%NOTFOUND;` | 如果没有更多记录了就退出循环 | | `DBMS_OUTPUT.PUT_LINE(...)` | 输出信息到控制台(用于调试) | > 💡 注意:`DBMS_OUTPUT.PUT_LINE` 是 Oracle 中常用的调试输出函数,在 SQL*Plus 或 PL/SQL Developer 等工具中可见,但在某些客户端(如部分 JDBC 连接)中默认不显示,需手动启用。 --- ### 🧠 小技巧:如何将结果保存到日志? 如果你想把处理的结果记录下来,而不是仅仅打印出来,你可以创建一张日志并插入记录: #### 创建日志: ```sql CREATE TABLE log_table_diff ( id NUMBER PRIMARY KEY, days_diff NUMBER ); ``` #### 修改 PL/SQL 块插入日志: ```sql DECLARE CURSOR cur IS SELECT id, start_time, end_time FROM td_d_ddmx ORDER BY id; rec cur%ROWTYPE; BEGIN OPEN cur; LOOP FETCH cur INTO rec; EXIT WHEN cur%NOTFOUND; INSERT INTO log_table_diff (id, days_diff) VALUES (rec.id, rec.end_time - rec.start_time); END LOOP; COMMIT; CLOSE cur; END; / ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科学的N次方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值