Glue Studio Notebook自定义IPython魔法命令失败求助:AttributeError报错
在Glue Studio Notebook中实现自定义查询工具(替代IPython魔法命令)
问题原因
Glue Studio Notebook的执行内核是Spark内核,而非标准IPython内核,因此get_ipython()会返回None,无法使用IPython原生的魔法命令注册机制(@register_line_magic等装饰器直接失效)。
解决方案:封装自定义查询函数
我们可以直接封装函数实现类似魔法命令的功能,用于通过Glue连接执行PostgreSQL查询,步骤如下:
- 安装必要依赖
%additional_python_modules psycopg2-binary pandas
- 封装PostgreSQL查询函数
该函数将利用Glue连接配置获取数据库信息,执行SQL并返回Spark DataFrame:
import psycopg2 import pandas as pd from awsglue.context import GlueContext from pyspark.context import SparkContext # 初始化Glue上下文 sc = SparkContext.getOrCreate() glueContext = GlueContext(sc) def run_pg_query(sql: str, glue_connection_name: str): # 从Glue连接中提取JDBC配置 conn_config = glueContext.extract_jdbc_conf(glue_connection_name) # 建立PostgreSQL连接 with psycopg2.connect( host=conn_config['host'], port=conn_config['port'], user=conn_config['user'], password=conn_config['password'], dbname=conn_config['database'] ) as conn: # 执行SQL并转为Pandas DataFrame pandas_df = pd.read_sql(sql, conn) # 转为Spark DataFrame(可选,根据需求选择) spark_df = glueContext.createDataFrame(pandas_df) return spark_df
- 使用自定义函数
直接调用函数即可执行查询,用法如下:
# 替换为你的Glue连接名和SQL语句 result_df = run_pg_query("SELECT * FROM your_target_table", "your-glue-postgres-connection") # 查看结果 result_df.show()
模拟魔法命令风格(可选)
如果想要更贴近IPython魔法命令的使用体验,可以封装一个简单的解析函数:
def pg(line: str): # 解析输入:格式为 "连接名 SQL语句" parts = line.split(maxsplit=1) if len(parts) != 2: print("使用格式:pg <Glue连接名> <SQL查询语句>") return conn_name, sql = parts return run_pg_query(sql, conn_name)
使用示例:
result = pg("your-glue-postgres-connection SELECT id, name FROM your_table LIMIT 10") result.show()
内容的提问来源于stack exchange,提问作者DanielS
相关产品推荐
相关产品推荐

