我是 SQLAlchemy(通常是 ORM)的新手,我正在尝试将现有应用程序转移到 SQLAlchemy,以便我们可以将一些代码复杂性从当前现有(并且更新繁琐)查询转移到 Python。不幸的是,我在数据库反射后立即收到错误。尽管我可以直接查询表,但我实际上无法直接访问类或类之间的关系。下面是我正在尝试做的一个大约最小的例子。
现有的 postgres 表:
dev=> \d+ gmt_file
Table "public.gmt_file"
Column | Type | Modifiers | Storage | Stats target | Description
-----------+--------------+-----------+----------+--------------+-------------
file_id | integer | not null | plain | |
a | integer | | plain | |
b | integer | | plain | |
Indexes:
"gmt_file_pk" PRIMARY KEY, btree (file_id)
Foreign-key constraints:
"gmt_file_a_fk" FOREIGN KEY (a) REFERENCES cmn_user(user_id)
"gmt_file_b_fk" FOREIGN KEY (b) REFERENCES cmn_user(user_id)
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy 应用程序(最小示例):
from sqlalchemy import create_engine
from sqlalchemy.orm …
Run Code Online (Sandbox Code Playgroud) 是否有类似于 collect_list 或 collect_set 的函数将一列地图聚合到(分组的)pyspark 数据框中的单个地图中?例如,此函数可能具有以下行为:
>>>df.show()
+--+---------------------------------+
|id| map |
+--+---------------------------------+
| 1| Map(k1 -> v1)|
| 1| Map(k2 -> v2)|
| 1| Map(k3 -> v3)|
| 2| Map(k5 -> v5)|
| 3| Map(k6 -> v6)|
| 3| Map(k7 -> v7)|
+--+---------------------------------+
>>>df.groupBy('id').agg(collect_map('map')).show()
+--+----------------------------------+
|id| collect_map(map) |
+--+----------------------------------+
| 1| Map(k1 -> v1, k2 -> v2, k3 -> v3)|
| 2| Map(k5 -> v5)|
| 3| Map(k6 -> v6, k7 -> v7)|
+--+----------------------------------+
Run Code Online (Sandbox Code Playgroud)
使用其他 collect_ 聚合和 udf 之一产生所需的结果可能不会太困难,但似乎应该已经存在这样的东西。